У меня есть селектор в корневом элементе, который работает нормально; фон переключается при нажатии. Это не корневой элемент макета действия, но это корневой элемент 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
- Удалить gen \ com.comp.proj \ R.java