列表视图设置自定义波纹选择器

时间:2014-11-20 20:41:10

标签: android android-listview android-5.0-lollipop

我试图在以下条件下使用Lollipop上的列表视图控件:

  1. 主题类型是默认的Theme.Material(黑暗主题)。
  2. 列表视图包含在具有白色背景的较大布局中。
  3. 列表视图应该有一个显示为白色背景的列表选择器。
  4. 注意:我被迫使用自定义列表选择器颜色,因为如果我使用白色背景,暗材料主题选择器使用主题的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 个答案:

答案 0 :(得分:27)

你正在使用无界波纹,例如:没有内容或遮罩层的波纹,因此纹波投射到其父ListView的背景上。您应该设置一个遮罩层来约束纹波边界。

RES /抽拉/ 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>
相关问题