DataBinding:有什么方法可以限制ObservableInt,@ ColorInt或@ColorRes的整数类型

时间:2019-06-01 14:21:36

标签: android binding

当我们使用Android DataBinding库时,我们总是这样写:

// layout xml
android:textColor="@{vm.textColor}"

// SomeVm.kt
var textColor = ObservableInt()
...
textColor.set(R.color.some_color)

但这是错误的。 TextView.setTextColor()需要@ColorInt int参数,例如:

public void setTextColor(@ColorInt int color);

但是我们设置的是@ColorRes int资源。

所以我的问题是,有什么方法可以将textColor变量限制为仅@ColorInt可观察的int吗?

我尝试过:

var textColor = ObservableField<@ColorInt Int>()

但是代码没有给出错误:

textColor.set(R.color.some_color)

1 个答案:

答案 0 :(得分:0)

我认为这不是限制,而是为setTextColor方法提供正确的参数类型。

您是否尝试过使用textColor.set(ContextCompat.getColor(context, R.color.some_color))来获得@ColorInt?应该可以。

否则,请创建自己的BindingAdapter,例如:

@BindingAdapter("textColor")
fun setTextColor(view: TextView, @ColorRes color: Int) = with(view) {
    textColor = ContextCompat.getColor(context, color)
}

并在您的布局中使用它,例如app:textColor="@{vm.textColor}"