Tint在DataBinding的21版本以下不起作用。

4

我正在使用DataBinding根据布尔标志在ImageView上对矢量图进行tint。这段代码适用于Android版本>=21,但在版本<21时会出现错误。

<androidx.appcompat.widget.AppCompatImageView
    android:tint="@{model.nextEnabled ? @color/primary : @color/silver}"
    app:srcCompat="@drawable/ic_right_blue_24dp"
    />

这里的ic_right_blue_24dp是一个矢量图。

检查绑定类后,我发现<21版本的代码没有生成。

       if(getBuildSdkInt() >= 21) {

            this.mboundView1.setImageTintList(androidx.databinding.adapters.Converters.convertColorToColorStateList(modelBackEnabledMboundView1AndroidColorPrimaryMboundView1AndroidColorSilver));
        }
我已经尝试了我所能想到和找到的所有方法。
  • AppCompatImageView
  • ImageView
  • app:srcCompat
  • android:src
  • app:tint
  • vectorDrawables.useSupportLibrary = true
  • AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
在这里,我必须告诉你,所有事情都可以使用常规的“tint”而不需要“binding”来工作。

测试用例 app:tint - AskNilesh
1
是的,我已经尝试过了,它会导致一个错误:在androidx.appcompat.widget.AppCompatImageView上找不到参数类型为int的属性'app:tint'的setter。 - Khemraj Sharma
@Mykhailo 不,我已经迁移到了 AndroidX,我相信 AndroidXSupport 的类别没有区别。因为 AndroidX 只是一个重命名的过程。https://dev59.com/MlUK5IYBdhLWcg3wySfB - Khemraj Sharma
1
这个回答解决了你的问题吗?使用数据绑定设置ImageView的色调 - childno͡.de
这是一个非常老的问题,但我认为它确实存在。不过应该由谷歌来解决。 - Khemraj Sharma
显示剩余4条评论
2个回答

2

仍然存在自定义数据绑定。甚至可以按要求使用方法:

@BindingMethods({
    @BindingMethod(
        type = "androidx.appcompat.widget.AppCompatImageView",
        attribute = "android:tint",
        method = "setImageTintList"
    )
})

Martin,没错,那是我今天完成的任务。我创建了BindingAdapter,并在程序中设置了着色效果,这个方法能够适用于所有版本。 - Khemraj Sharma
Android绑定库尚未为<21版本添加方法。 - Khemraj Sharma
@Khemraj,你可以提交一个问题:https://issuetracker.google.com/issues/new?component=484080&template=878802 - Martin Zeitler
存在一个问题,访问https://dev59.com/BVEG5IYBdhLWcg3wf_rV >> https://issuetracker.google.com/issues/152953070。 - childno͡.de

2

这个 BindingAdapter 可以在程序中设置色调...我已经用过它并且成功了。

@BindingAdapter("android:tint")
fun AppCompatImageView.setImageTint(@ColorInt color: Int) {
    setColorFilter(color)
}

用法

<androidx.appcompat.widget.AppCompatImageView
    android:tint="@color/primary"
    ...
    />

这是一个 BindingAdapter,它将以编程方式设置 tint... 而且对我很有效。 - Ananthakrishnan K R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接