我有RecyclerView
扩展了以下网格项:
<RelativeLayout
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:layout_marginLeft="@dimen/children_tile_border"
android:layout_marginTop="@dimen/children_tile_border"
android:clickable="true"
android:focusable="true"
android:background="?selectableItemBackground"
tools:ignore="RtlHardcoded">
<com.example.app.ui.widget.SquareImageView
android:id="@+id/child_picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_alignParentBottom="true"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="68dp"
android:background="@color/tile_text_background"
android:gravity="center_vertical"
android:layout_alignParentBottom="true">
..............
</LinearLayout>
</RelativeLayout>
但是,除非我将SquareImageView's
可见性设置为不可见,否则涟漪效应不会出现。似乎涟漪效应低于SquareImageView
。我怎样才能将它绘制在SquareImageView
上?
答案 0 :(得分:66)
将以下代码添加到您的父版面
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
如果你想要自定义涟漪效果,请在你的drawable-v21中添加这个ripple_custom.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorHighlight">
<item
android:id="@android:id/mask"
android:drawable="@color/windowBackground" />
</ripple>
支持旧版本在drawable中添加ripple_custom.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/colorHighlight" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
答案 1 :(得分:12)
变化:
android:background="?selectableItemBackground"
要:
android:background="?android:attr/selectableItemBackground"
并将其添加到SquareImageView
android:clickable="false"
答案 2 :(得分:8)
我们可以在FrameLayout
内包装RecyclerView Item并为其设置android:foreground
属性。有关详细信息,请查看link之后的结帐它很适合我。
答案 3 :(得分:2)
如果您有CardView + ImageView
只需插入CardView
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
对于RelativeLayout + ImageView
插入RelativeLayout
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
或者
android:focusable="true"
android:background="?attr/selectableItemBackground"
此代码对我有用
答案 4 :(得分:1)
您的SquareImageView
填满了整个空间(width
为match_parent
而height
为wrap_content
),因此SquareImageView
收到了点击事件。
在我的案例中有用的是将RelativeLayout
中所有对象的可点击状态设置为false:
android:clickable="false"
确保您的RelativeLayout
处理活动中的点击事件。在我的代码中,我将RelativeLayout
设置为view v
并在其上设置onClick Listener
以处理我的列表项中的CheckBox
。
v.setOnClickListener(this);
希望这有助于任何阅读它的人。
答案 5 :(得分:0)
以上答案正确。但我想推荐android:foreground的用法,因为它显示了imageView的波纹。
在您的根视图上,添加以下内容。
android:foreground="@drawable/ripple_effect_color_primary"
android:clickable="true"
android:focusable="true"
我知道对于这样的旧线程来说这是一个很晚的答案。但是谁知道呢,实际上有人会发现它有用。