RecyclerView项目点击涟漪效果

14
我试图给RecyclerView的item添加涟漪效果。我在网上查找过,但没有找到我需要的内容。我尝试将android:background属性应用于RecyclerView本身,并将其设置为"?android:selectableItemBackground",但这并没有起作用。 我的父布局是这样的。
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/dailyTaskList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:scrollbars="vertical" />
</LinearLayout>

并且适配器模板如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="5dp">

            <TextView
                android:id="@+id/txtTitle"
                style="@style/kaho_panel_sub_heading_textview_style"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/txtDate"
                style="@style/kaho_content_small_textview_style"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

    </LinearLayout>
</LinearLayout>

请给我提供解决方案。


你尝试在哪个父元素中使用了 android:background="?android:attr/selectableItemBackground" - Akshay Bhat 'AB'
2个回答

46

android:background="?attr/selectableItemBackground"添加到项目布局的最上层父元素即可解决问题。 但在某些情况下,仍会缺少动画,添加android:clickable="true"即可。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/selectableItemBackground"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dp">

        <TextView
            android:id="@+id/txtTitle"
            style="@style/kaho_panel_sub_heading_textview_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/txtDate"
            style="@style/kaho_content_small_textview_style"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>
</LinearLayout>

4
ConstraintLayout不能正常工作。 - Andritchi Alexei
1
它可以与ConstraintLayout一起使用(尝试将clickable和focusable设置为true)。 - mr.kostua
将android:background="?attr/selectableItemBackground"添加到我的项目布局的最顶层父级中起作用。 - Qadir Hussain
三年后,这是 Stack Overflow 上众多答案中唯一可行的答案。 - u84six
每天都要使用它 ;) - Joaquim Ley

3
在你的recyclerView Item父项中,添加:
android:background="?android:attr/selectableItemBackground"

像下面这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground"
    android:orientation="vertical">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="5dp">

            <TextView
                android:id="@+id/txtTitle"
                style="@style/kaho_panel_sub_heading_textview_style"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/txtDate"
                style="@style/kaho_content_small_textview_style"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />


    </LinearLayout>

</LinearLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接