我希望RecyclerView中的项目在按下时有触摸反馈或涟漪,但它们似乎不起作用,我认为这是因为复选框。
仅在长按时显示波纹,但是简单的按键不会显示。
有人可以帮我修理吗?提前谢谢。
PD:我使用的是ListView,项目布局父级是LinearLayout。涟漪效果很好。转移到RecyclerView后,项目涟漪不起作用。我再次尝试使用LinearLayout,但仍然无法正常工作。
这是布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/requestCard"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal">
<ImageView
android:id="@+id/imgIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:maxHeight="64dp"
android:maxWidth="64dp"
android:padding="@dimen/lists_padding"
android:src="@drawable/ic_launcher"
tools:ignore="ContentDescription"/>
<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/imgIcon"
android:layout_toRightOf="@+id/imgIcon"
android:ellipsize="end"
android:maxLength="@integer/request_text_length"
android:maxLines="1"
android:padding="@dimen/lists_padding"
android:textSize="@dimen/abc_text_size_large_material"
tools:text="App Name"/>
<CheckBox
android:id="@+id/chkSelected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:clickable="false"
android:padding="@dimen/lists_padding"/>
</RelativeLayout>
答案 0 :(得分:8)
在onClick方法中(假设在回调中),请确保在<{1}}之后不致电notifyDataSetChanged()
。
notifyDataSetChanged()将与这些默认纹波冲突 的效果。
notifyItemChanged(position)
答案 1 :(得分:1)
我认为你正在寻找涟漪效应。我可以给你基本的想法,只需在drawable&amp;中创建一个xml文件(ripple.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"
android:drawable="@android:color/white"
>
</item>
</ripple>
&安培;只需在另一个声明了recyclerview元素的xml文件中写两行。
android:background="@drawable/ripple"
android:clickable="true"
就像我的情况一样,我只有TextView,而在父标签中,我正在声明这两行
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ripple"
android:clickable="true"
>
<TextView
android:id="@+id/textView_Username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:textColor="@color/colorPrimary"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
/>
</LinearLayout>
观看此视频
答案 2 :(得分:0)
您使用android:background="?android:attr/selectableItemBackground"
,但应使用android:foreground="?android:attr/selectableItemBackground"