色调在DataBinding中的<21版本不起作用

时间:2018-10-29 12:44:51

标签: android android-databinding

我正在使用DataBindingtint的{​​{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

我已经尝试了所有我认为可以找到的东西。

  • AppCompatImageView
  • ImageView
  • 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

3 个答案:

答案 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版本。