当我们使用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)
答案 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}"