如何避免在 BindingAdapter 中显式调用 findDrawableByLayerId 和 getDrawable
How to avoid explicitly call findDrawableByLayerId and getDrawable in a BindingAdapter
用例有一个 DatabindingAdapter,它相应地更改 viewHolder 项目的 Drawable 颜色。
@BindingAdapter("setBackgroundColor")
fun setColor(imageView: ImageView, id: String) {
imageView.background =
(ContextCompat.getDrawable(
imageView.context,
R.drawable.background_corner_right
) as LayerDrawable?)?.run {
imageViewBackground =
(findDrawableByLayerId(R.id.corneredDrawable) as GradientDrawable)
.apply {
mutate()
}
this
}
imageViewBackground?.setColor(Color.parseColor(id))
}
并且在 XML 部分:
<ImageView
android:id="@+id/iv_color"
android:layout_width="50dp"
android:layout_height="30dp"
setBackgroundColor="@{contractType.color}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.0"/>
这很好用,但我想通过不显式调用 findDrawableByLayerId 来优化更多,R.drawable.background_corner_right
无论如何我可以将 Xml 中的那些作为参数传递给 BindingAdapter 吗?这将使 BindingAdapter 更加通用和可重用
事实证明,我可以在其索引列出的图层中访问我的 DrawableLayer,因此 (findDrawableByLayerId(R.id.corneredDrawable) as GradientDrawable) 被 (findDrawableByLayerId(getId(0)) 作为 GradientDrawable)
至于背景本身,我将其添加到 XML 并通过 (imageView.background as LayerDrawable)
调用它
已解决。
用例有一个 DatabindingAdapter,它相应地更改 viewHolder 项目的 Drawable 颜色。
@BindingAdapter("setBackgroundColor")
fun setColor(imageView: ImageView, id: String) {
imageView.background =
(ContextCompat.getDrawable(
imageView.context,
R.drawable.background_corner_right
) as LayerDrawable?)?.run {
imageViewBackground =
(findDrawableByLayerId(R.id.corneredDrawable) as GradientDrawable)
.apply {
mutate()
}
this
}
imageViewBackground?.setColor(Color.parseColor(id))
}
并且在 XML 部分:
<ImageView
android:id="@+id/iv_color"
android:layout_width="50dp"
android:layout_height="30dp"
setBackgroundColor="@{contractType.color}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.0"/>
这很好用,但我想通过不显式调用 findDrawableByLayerId 来优化更多,R.drawable.background_corner_right
无论如何我可以将 Xml 中的那些作为参数传递给 BindingAdapter 吗?这将使 BindingAdapter 更加通用和可重用
事实证明,我可以在其索引列出的图层中访问我的 DrawableLayer,因此 (findDrawableByLayerId(R.id.corneredDrawable) as GradientDrawable) 被 (findDrawableByLayerId(getId(0)) 作为 GradientDrawable)
至于背景本身,我将其添加到 XML 并通过 (imageView.background as LayerDrawable)
调用它已解决。