2014-11-20 2 views
12

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

  1. Типа темы по умолчанию Theme.Material (темная тема).
  2. Вид списка содержится внутри большого макета, который имеет белый фон.
  3. В представлении списка должен быть список, который отображается на белом фоне.

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

я впервые попробовал следующее:

расположение 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

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

Спасибо, Zach

ответ

26

Вы используете неограниченную пульсацию, например пульсация без слоя содержимого или маски, поэтому рябь проецируется на фон родительского 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> 
+3

Благодаря Alanv! Еще один отличный ответ сегодня (вы помогли мне с еще одним вопросом пульсации раньше!). Очень ценится. – Zach

+0

Что такое '@ id/mask'? Нужно ли определять его где-то еще? – poitroae

+0

Это должно быть '@android: id/mask'. Исправлена ​​ошибка кода. – alanv

Смежные вопросы