В сценарии использования имеется DatabindingAdapter, который соответственно изменяет цвет Drawable элемента viewHolder.
@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 более универсальным c и может использоваться повторно