我实现了一个ReceylerView,我无法弄清楚如何获得触摸反馈(来自它的连锁反应)。
这是我为onClickListener所做的:
holder.itemView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//start Intent
}
});
我添加了可点击的和专注于我的XML。这就是回收者视图膨胀的原因:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:padding="4dp" >
答案 0 :(得分:28)
你必须设置一个可绘制的波纹作为背景:
android:background="@drawable/ripple"
<强> ripple.xml:强>
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#ffa0a0a0"/>
您可能需要屏蔽drawable:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#ffa0a0a0">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#ffa0a0a0"/>
</shape>
</item>
</ripple>
这会在触摸时产生简单的灰色波纹(如果您需要更多说明,这里是guide)。
在SDK版本21(Lollipop)中添加了RippleDrawable。在pre-lollipop上使用Ripple drawable会使应用程序崩溃。在pre-lollipop设备上使用简单的选择器或使用重新创建效果的库。 (GitHub)
更新:您可以使用以下代码轻松获得涟漪效果:
android:background="?attr/selectableItemBackground"
或者如果你不想要矩形面具:
android:background="?attr/selectableItemBackgroundBorderless"
这与棒棒糖前设备兼容,我们将选择一个简单的选择器。我相信这会在黑暗主题的应用程序中产生轻微的涟漪,反之亦然,所以如果你想要一个自定义的彩色波纹,你仍然需要创建一个可绘制的波纹。
答案 1 :(得分:2)
除了@Longi的回答:如果你想让RecyclerViews的物品有自己的背景,同时又有涟漪效果,你可以按照下面的例子中所示: 的 recycler_view_item.xml:强>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/recyclerview_item_background">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/selectableItemBackgroundBorderless">
...
</LinearLayout>
</LinearLayout>
在这个例子中, @ drawable / recyclerview_item_background 是一个九补丁png,但你可以在这里使用任何背景。
在我使用 android:background =“?attr / selectableItemBackground”的情况下,RecyclerView项目的根线性布局确实具有涟漪效果,但子线性布局的背景重叠,因此隐藏了涟漪效应。