无法将背景属性绑定到颜色

时间:2018-04-18 07:13:37

标签: android xml android-layout android-databinding

我正在尝试根据返回布尔值的方法更改TextView的background属性。 所以这就是我的TextView的样子

<data>
    <variable
        name="model"
        type="fit.cure.meetingdisplay.MeetingModel" />
</data>
.....
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@{model.isAvailable() ? @color/colorAvailable : @color/colorUnavailable, default=@color/colorAvailable"
    android:gravity="center"
    android:text="@{model.getAvailabilityText(), default=Available}"
    android:textAllCaps="true"
    android:textAppearance="@android:style/TextAppearance.Holo.Large.Inverse" />

模型如下 -

public class MeetingModel {
    private boolean isAvailable = false;

    public boolean isAvailable() {
        return isAvailable;
    }

    public void setAvailable(boolean available) {
        isAvailable = available;
    }

    public String getAvailabilityText() {
        if (isAvailable) {
            return "available";
        }
        return "unavailable";
    }
}

但是我在构建项目时遇到了这个错误 -

error: '@{model.isAvailable() ? @color/colorAvailable : @color/colorUnavailable, default=@color/colorAvailable' is incompatible with attribute android:background (attr) reference|color.
Message{kind=ERROR, text=error: '@{model.isAvailable() ? @color/colorAvailable : @color/colorUnavailable, default=@color/colorAvailable' is incompatible with attribute android:background (attr) reference|color., sources=[/Volumes/Projects/Work/Clients/CureFit/MeetingDisplay/app/src/main/res/layout/activity_main.xml:55], original message=, tool name=Optional.of(AAPT)}

我正在使用@color/colorAvailable,因为它被提及here可以使用它。我还尝试使用以下方法绘制背景值的可绘制方法 -

"@{model.isAvailable() ? @drawable/drawable_available : @drawable/drawable_unavailable, default=@drawable/drawable_available"

drawables在colors.xml中定义如下 -

<drawable name="drawable_available">@color/colorAvailable</drawable>
<drawable name="drawable_unavailable">@color/colorUnavailable</drawable>

仍然得到同样的错误。奇怪的是,默认值适用于两种情况。

所以,我在这里做错了,或者根本不能绑定背景属性(我不认为它是不可能的)。

1 个答案:

答案 0 :(得分:1)

这是关于为什么自动完成这些天如此重要以及为什么如果它在xmls中更好地工作会让我们的日子变得更好的完美示例。您只是错过了结束括号:

android:background="@{model.isAvailable() ? @color/colorAvailable : @color/colorUnavailable, default=@color/colorAvailable}"