正如已经回答的那样,最简单的解决方案是仅添加以下内容之一作为RecyclerView
行的背景:
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
但是,如果您遇到问题使用此方法时,或者想要更好地控制颜色,则可以执行以下操作。
自定义波纹效果
这个答案是从这个简单的Android RecyclerView示例开始的。它将如下图所示。
为API 21之前的设备添加选择器
在API 21(Android 5.0 Lollipop)之前,单击某项RecyclerView
只会更改其背景颜色(无波纹效果)。这也是我们要做的。如果您仍然拥有使用这些设备的用户,他们就会习惯这种行为,因此我们不会为它们担心太多。(当然,如果您也确实想要它们的波纹效果,则可以使用自定义库。)
右键单击您的res/drawable
文件夹,然后选择“ 新建”>“可绘制资源文件”。称它为custom_ripple
。单击确定,然后粘贴以下代码。
custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
我将其用作colorAccent
按下状态的突出显示颜色,因为它已经可用,但是您可以定义所需的任何颜色。
为API 21+设备添加波纹效果
右键单击您的res/drawable
文件夹,然后选择“ 新建”>“可绘制资源文件”。再打custom_ripple
一次 不过,这次不要单击“确定”。从可用预选赛列表中选择版本,然后点击>>按钮,并写21
了平台的API级别。现在,单击“确定”并粘贴以下代码。
v21 / custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">
<item
android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
同样,我使用colorAccent
了波纹颜色,因为它可用,但是您可以使用所需的任何颜色。遮罩将波纹效果限制为仅行布局。遮罩的颜色显然无关紧要,所以我只使用了不透明的白色。
设为背景
在RecyclerView项目的根布局中,将背景设置为我们创建的自定义涟漪图。
android:background="@drawable/custom_ripple"
在我们开始的示例项目中,它看起来像这样:
<?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:orientation="horizontal"
android:background="@drawable/custom_ripple"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
已完成
而已。您应该现在就可以运行您的项目。感谢这个答案和这个YouTube视频的帮助。
CardView
在该问题中存在某些方面比与该更笼统的问题无关。