数据绑定将 android 资源绑定到后台

Databinding bind android resource to background

我想要一个 EditText,根据它是否可编辑来改变它的背景。

如果 EditText 是 "editable",它将具有默认的 EditText 背景可绘制,如果不是,它将获得透明背景(看起来像一个简单的 textView)。

我已经做到了:

android:background="@{viewModel.editable ? android.R.drawable.edit_text : android.R.color.transparent}"

并且它在编译或执行期间不会抛出任何异常,但我的 EditText 似乎没有背景,并且在修改变量 "editable" 时没有任何变化。

我的变量 editable 是一个可绑定变量,定义如下:

@Bindable
boolean editable;

public boolean isEditable() {
    return editable;
}

public void setEditable(boolean editable) {
    this.editable = editable;
    notifyPropertyChanged(BR.editable);
}

有人知道根据布尔值提供可绘制资源的线索吗?

根据 Custom Conversions 部分中的数据绑定库文档,您的三元表达式应该对资源常量使用 XML 表示法,而不是 Java 表示法:

android:background="@{viewModel.editable ? @android:drawable/edit_text : @android:color/transparent}"