La vista de lista establece un selector de rizado personalizado

Estoy tratando de usar un control de vista de lista en Lollipop bajo las siguientes condiciones:

  1. El tipo de tema es el Theme.Material predeterminado (tema oscuro).
  2. La vista de lista está contenida dentro de la disposición más grande que tiene un fondo blanco.
  3. La vista de lista debe tener un selector de lista que aparece con el fondo blanco.

NOTA: Tengo que usar un color selector de lista personalizado porque si utilizo un fondo blanco, el selector temático de material oscuro utiliza el color ColorControlHighlight del tema para el ripple, que es 40ffffff y no aparece.

Primero probé lo siguiente:

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> 

Y fila de vista de lista 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> 

Lo que espero ver es cuando selecciono un elemento, el elemento se selecciona con una ondulación de color como # ff0000. Sin embargo, esto es lo que acabo viendo:

Introduzca aquí la descripción de la imagen

Lo que estoy esperando es algo cerca de este comportamiento – pero confinado dentro de la fila de la lista seleccionada! ¿Qué estoy haciendo mal?

Gracias, Zach

Está utilizando una ondulación sin límites, por ejemplo, una ondulación sin capa de contenido o máscara, por lo que la ondulación se proyecta sobre el fondo de su ListView padre. Debe establecer una capa de máscara para restringir los límites de ondulación.

Res / drawable / 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> 
  • Extraño BUG en mi ListView (Android)
  • GridView con colSpan y rowSpan
  • Cómo agrandar el elemento central en un listview - android?
  • ScrollView con un ListView no se desplaza - android
  • Android: Actualizar ListView en la primera actividad al regresar de la segunda actividad
  • Uso de la API Palatte en el adaptador ListView
  • Android ListView mListView.getChildAt (i) es nulo, ¿cómo resolverlo?
  • Omitió 60 cuadros! La aplicación puede estar haciendo demasiado trabajo en su hilo principal
  • Cómo obtener la posición del elemento de la lista en el método onGesturePerformed?
  • ¿Cuál es el beneficio de ViewHolder?
  • Cómo obtener elementos seleccionados de la vista de lista de selección múltiple
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.