#android #image #selector #drawable #touch-event
#Android #изображение #селектор #можно рисовать #сенсорное событие
Вопрос:
в папке для рисования:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/icon2" />
<item android:drawable="@drawable/icon3" />
</selector>
и макет — это просто линейный макет, который заполняет все пространство
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/on_touch_"
android:weightSum="1" android:focusable="true" android:focusableInTouchMode="true">
</LinearLayout>
и когда я нажимаю это, ничего не происходит
Если я добавлю, например, какой-нибудь textview и назначу android:background="@drawable/on_touch_"
, то при нажатии этого textview изображение изменится правильно.
В чем проблема с линейной компоновкой, почему она не меняет изображение при нажатии?
Редактировать: я уверен, что мой рисованный селектор хорош и работает, потому что я поставил в качестве фона для других элементов, и он работает.
Но моя проблема в том, как установить drawable для корневого элемента
Комментарии:
1. Что именно вы хотите реализовать?
Ответ №1:
Добавьте это в свой макет :
android:clickable="true"
Это установит нажатое состояние, когда вы нажмете на него.
Ответ №2:
попробуйте
save_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false"
android:drawable="@drawable/save_hover_new" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/save_hover_new" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/save_hover_new" />
<item android:drawable="@drawable/save_new" />
</selector>
и укажите фон макета как селектор, подобный
android: background=»@drawable /save_selector
Комментарии:
1. tnx, но проблема не в селекторе. Я помещаю тот же селектор, который можно рисовать, в другой компонент, такой как textview, и он работает, но не с макетом
2. ДА, определенно это можно сделать! Я сделал это, но не в корневом макете, моя проблема в том, что я не могу добавить его в корневой макет
Ответ №3:
Я бы убедился, что у меня нет тезки, который можно нарисовать. Вы, кажется, используете on_touch_.xml
в качестве своего селектора. Возможно, есть также on_touch_.png
?
Я бы также убедился, что я не устанавливаю фон снова, на что-то другое или не делаю его недоступным в коде.
Ответ №4:
Я получил селектор в корневом элементе, который работает нормально; фон переключается при нажатии. Это не корневой элемент макета действия, но это корневой элемент XML-файла.
Сначала фону присваивается формат png:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/panel"
>
...
Я назначаю фон селектору только при назначении OnClickListener:
private void setClickListener(OnClickListener ocl) {
View boxRoot = findViewById(R.id.box_root);
if (ocl != null) {
boxRoot.setOnClickListener(ocl);
boxRoot.setBackgroundDrawable(getResources().getDrawable(R.drawable.panel_arrow_right_bgstate));
setClickable(true);
...
В моем XML я использовал android:clickable="true"
, но затем я также добавил android:focusable="true" android:focusableInTouchMode="true"
в соответствии с вашим случаем. Это также отлично работало с переключением фона для всех моих четырех состояний.
// panel_arrow_right_bgstate.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_normal"/>
<item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
<item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/panel_arrow_right_selected"/>
<item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/panel_arrow_right_pressed"/>
Если у вас это не работает, значит, с вашим кодом что-то не так, где-то еще.
Когда я добавляю или удаляю чертежи, Eclipse иногда становится подозрительным и смешивает их. Мои обычные измерения:
- Чистый проект
- Обновить папку res в Eclipse
- Удалить gencom.comp.projR.java