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

Zac*_*ach 12 android android-listview android-5.0-lollipop

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

  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>
Run Code Online (Sandbox Code Playgroud)

list_selector xml

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

</ripple>
Run Code Online (Sandbox Code Playgroud)

并列出视图行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>
Run Code Online (Sandbox Code Playgroud)

我期待看到的是当我选择一个项目时,选择的项目的颜色为#ff0000.然而,这是我最终看到的:

在此输入图像描述

我希望的是有点接近这种行为 - 但限制在选定的列表行中!我究竟做错了什么?

谢谢,扎克

ala*_*anv 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>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢Alanv!今天另一个很好的回应(你早先帮我解决了另一个涟漪问题!).非常感激. (3认同)