我使用RecyclerView
和一个简单的项目布局,该布局由ConstraintLayout
组成,其中包含每个项目的文本元素。我想同时设置所有项目的背景
SDK的最低版本为21,如有需要,可以提高它。
我尝试过的事情:
@android:drawable/list_selector_background
不可自定义,也不会引起涟漪。?selectableItemBackground
或?selectableItemBackgroundBorderless
不起作用,它将在运行时引发异常(Failed to resolve attribute [...]
)。我确实将设计支持库放置在我的gradle脚本中,或者现在放置在com.google.android.material
包中。前置android:attr/
会产生相同的错误。StateListDrawable
自己使用许多<ripple>
的可绘制对象来构建所有对象似乎过于复杂。答案 0 :(得分:0)
@Cheticamp与this article中的方法结合起来效果很好:
项目的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_item_background_active_handler">
<include
layout="@layout/the_actual_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground" />
</FrameLayout>
list_item_background_active_handler
看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/listBackgroundActive" android:state_activated="true" />
<!-- default -->
<item android:drawable="@android:color/transparent" />
</selector>
这允许使用自定义颜色处理活动状态。只需在适配器中isActivated(true)
中某个项目的视图上调用onBindViewHolder()
。
波纹效果的颜色可以用this approach自定义。