Представление списка задает настраиваемый селектор пульсаций

Я пытаюсь использовать элемент управления списком на Lollipop при следующих условиях:

  • Тип темы - это тема по умолчанию. Материал (темная тема).
  • Вид списка содержится внутри большего макета, который имеет белый фон.
  • В представлении списка должен быть список, который отображается на белом фоне.

ПРИМЕЧАНИЕ. Я вынужден использовать собственный цвет селектора списков, потому что, если я использую белый фон, темный селектор тематического материала использует цвет цвета colorControlHighlight для пульсации, который равен 40ffffff, и не отображается.

Сначала я попробовал следующее:

layout xml

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@android:color/white" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:listSelector="@drawable/list_selector" />

</LinearLayout>

list_selector xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ff0000" >

</ripple>

И строка списка списка xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    tools:ignore="UseCompoundDrawables" >

    <ImageView
        android:id="@+id/list_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/list_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

То, что я ожидаю увидеть, - это когда я выбираю элемент, элемент выбирается с волнистой расцветкой, как # ff0000. Однако это то, что я вижу:

enter image description here

То, что я надеюсь, несколько близко к этому поведению, но ограничено в выбранной строке списка! Что я делаю неправильно?

Спасибо, Зак

Ответ 1

Вы используете неограниченную пульсацию, например. пульсация без слоя содержимого или маски, поэтому рябь проецируется на фон родительского ListView. Вы должны установить слой маски, чтобы ограничить границы ряби.

Рез/рисуем/my_list_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:id="@android:id/mask">
        <color android:color="@color/white" />
    </item>
</ripple>