我正在使用DataBinding到tint
的{{1}}矢量可绘制对象,它是基于布尔标志的。此代码适用于> = 21版本。但是在<21版本中失败。
ImageView
<androidx.appcompat.widget.AppCompatImageView
android:tint="@{model.nextEnabled ? @color/primary : @color/silver}"
app:srcCompat="@drawable/ic_right_blue_24dp"
/>
是可绘制的矢量。
检查绑定类后,我可以看到未生成<21版本的代码。
ic_right_blue_24dp
我已经尝试了所有我认为可以找到的东西。
if(getBuildSdkInt() >= 21) {
this.mboundView1.setImageTintList(androidx.databinding.adapters.Converters.convertColorToColorStateList(modelBackEnabledMboundView1AndroidColorPrimaryMboundView1AndroidColorSilver));
}
app:srcCompat
android:src
app:tint
vectorDrawables.useSupportLibrary = true
在这里,我必须告诉您,所有事情都可以使用常规AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
而不使用tint
。
答案 0 :(得分:2)
此 BindingAdapter 将以编程方式设置色调...它对我有用
@BindingAdapter("android:tint")
fun AppCompatImageView.setImageTint(@ColorInt color: Int) {
setColorFilter(color)
}
用法
<androidx.appcompat.widget.AppCompatImageView
android:tint="@color/primary"
...
/>
答案 1 :(得分:1)
仍然有custom data-binding。甚至是所要求的方法:
@BindingMethods({
@BindingMethod(
type = "androidx.appcompat.widget.AppCompatImageView",
attribute = "android:tint",
method = "setImageTintList"
)
})
答案 2 :(得分:0)
代替
<androidx.appcompat.widget.AppCompatImageView
android:tint="@{model.nextEnabled ? @color/primary : @color/silver}"
app:srcCompat="@drawable/ic_right_blue_24dp"
/>
您不能尝试使用
<androidx.appcompat.widget.AppCompatImageView
app:tint="@{model.nextEnabled ? @color/primary : @color/silver}"
app:srcCompat="@drawable/ic_right_blue_24dp"
/>
替换
android:tint与app:tint
,并确保您使用的是androidx 1.1版本。