波纹效果仅适用于第一个ListView项目

Bas*_*sit 12 android

我已经实现了Lollipop中引入的涟漪效应ListView.但它只适用于第一项ListView.我已经按照这个问题的答案,但我无法设置涟漪效应.

我有一个ripple_background.xml在drawable-v21文件夹:

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@android:color/background_dark">
    <item>
        <shape
            android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>
Run Code Online (Sandbox Code Playgroud)

我ListView存在的布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/listSettings"
        android:listSelector="@android:color/transparent"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:divider="@color/price_item_divider"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="true"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

内部填充的项目ListView如下(settings_item_row.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/ripple_background"
    android:padding="16dp" >

    <ImageView
        android:id="@+id/imageViewIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:paddingRight="10dp" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageViewIcon"
        android:paddingRight="10dp"
        android:textColor="@android:color/black"
        android:textSize="18sp" />

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

谢谢您的帮助!

Pus*_*kar 7

我遇到了同样的问题,并找到了解决这个问题的简单方法.无需为任何列表项设置任何背景或ListView.只需设置android:listSelector你的波纹可绘制ListView.

所以ListView在我的活动中看起来像:

<ListView
        android:id="@+id/myListView"
        ...
        android:listSelector="@drawable/ripple" />
Run Code Online (Sandbox Code Playgroud)

我的波纹可绘制定义为:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/rippleColour">
    <item android:drawable="@color/backgroundColour"/>
</ripple>
Run Code Online (Sandbox Code Playgroud)


pha*_*ite 0

刚刚遇到这个问题并修复了它。从各个列表项视图中删除可绘制的波纹背景,然后在 ListView 本身上设置背景。另外,将 drawSelector 添加到列表项并从 ListView 中删除字段。

此修复仅适用于 ListView 具有单色背景。

您的列表项视图:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/ripple_background"
    android:padding="16dp" >
Run Code Online (Sandbox Code Playgroud)

和你的列表视图:

<ListView
    android:id="@+id/listSettings"
    android:listSelector="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:divider="@color/price_item_divider"
    android:dividerHeight="1dp"
    android:background="@color/__Your color here__
    />
Run Code Online (Sandbox Code Playgroud)