Пользовательский селектор для фона списка
Я пытаюсь установить некоторые пользовательские состояния выбора для каждого элемента в моем списке. Я пробовал следующее "
list_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true"
android:drawable="@drawable/row_selected_background" />
<item android:state_activated="true"
android:drawable="@drawable/row_selected_background" />
<item android:state_focused="true"
android:drawable="@drawable/row_selected_background" />
<item android:drawable="@drawable/row_background" />
</selector>
list.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/row_background"
android:listSelector="@drawable/list_selector">
</ListView>
</RelativeLayout>
По какой-то причине выбранный цвет фона списка не определяется, как он определен. Но нажатие/клик по умолчанию - это андроид голой голубой для списка. Что я делаю неправильно?
Ответы
Ответ 1
Используйте android:state_pressed
для указания нажатых состояний.
Подходит для использования: /res/drawable/bg.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/holo_red_dark"/>
</shape>
Селектор для использования: /res/drawable/item.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/bg"/>
</selector>
ListView
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:saveEnabled="true"
android:listSelector="@drawable/item"
/>
Результат при нажатии элемента списка:
![enter image description here]()
Примечание. Селектор списков рисуется позади Item View, Item View может иметь свой собственный фон.
Ответ 2
Шаг 1:
сначала установите row_selector.xml
Шаг 2:
примените селектор к элементам как
android:background="@drawable/row_selector"
Шаг 3:
Создайте селектор для списка, list_selector.xml
со всеми прозрачными состояниями, чтобы избавиться от состояний по умолчанию.
Шаг 4:
примените селектор к списку в виде
android:listSelector="@drawable/list_selector"