首页 > 解决方案 > 在 RecyclerView 上设置 alpha 但未选择子级 (Kotlin)

问题描述

我正在寻找一种方法来设置 RecyclerView 的所有元素的 alpha 而不迭代元素。

基本上我可以设置整个回收器的 alpha 并且所有子级都将继承该 alpha,但是当我更新所选子级的 alpha 时,它仍然从其父级继承该值,而不是更新它自己的 alpha 值。所有这些都必须在单击具有以下 clickListener 的项目时发生。

// it is the view on which the listener is called that belongs to the recycler
private val click = View.OnClickListener {
   recycler.alpha = 0.2f
   it.alpha = 1f
}

我检查了该项目是否被正确选择并且 clickListener 被调用。问题似乎是 alpha 是从 parent 继承的,ViewGroup但在官方文档中我找不到任何关于无法更改 child 中继承的 alpha 值的信息view

我错过了什么?如果设置父级的 alphaViewGroup是不行的,有没有办法避免遍历所有元素并为每个元素设置 alpha 值?

标签: androidkotlinandroid-recyclerviewalpha

解决方案


它不是继承的——孩子被画成父母的一部分。因此,由于整个父级都具有该 alpha,因此子级是使用该 alpha 绘制的。将孩子的 alpha 设置为0.2f将使该孩子更加透明。

您最好的选择可能是在您的 RecyclerView.Adapter 子类的onBindViewHolder方法中正确设置 alpha,并通过更改支持数据和notify...方法来更改 alpha。尝试在适配器之外更改 RecyclerView 子视图是自找麻烦,因为 RecyclerView 不会知道它们,并且可能会更改您的内容,添加更多视图等。


推荐阅读