Пользовательский селектор для фона списка

Я пытаюсь установить некоторые пользовательские состояния выбора для каждого элемента в моем списке. Я пробовал следующее "

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"