正确设置列表项的背景



我使用RecyclerView和一个简单的项目布局,由一个ConstraintLayout组成,其中包含每个项目的文本元素。我想设置所有项目的背景,同时

  1. 单击时显示涟漪效果。
  2. 可视化视图何时处于活动状态
  3. 能够设置颜色。(可选,如果真的必须的话(

最低 SDK 版本为 21,如果需要,允许提高。


我尝试过:

  • 使用@android:drawable/list_selector_background是不可自定义的,也没有显示波纹。
  • 使用?selectableItemBackground?selectableItemBackgroundBorderless不起作用,它会在运行时引发异常 (Failed to resolve attribute [...](。我确实在我的 gradle 脚本中放置了设计支持库,或者现在是com.google.android.material包。预置android:attr/会产生相同的错误。
  • 使用StateListDrawable使用许多<ripple>可绘制对象自己构建这一切似乎过于复杂,因为我不想重现上述功能的全部功能。

这个由@Cheticamp链接的答案与本文中的方法相结合,效果很好:

项目的布局如下所示:

<?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>

这允许使用自定义颜色处理活动状态。只需在适配器中onBindViewHolder()项的视图上调用isActivated(true)

涟漪效应的颜色可以用这种方法定制。

相关内容

  • 没有找到相关文章

最新更新