【问题标题】:android data binding colors from resources来自资源的android数据绑定颜色
【发布时间】:2017-09-30 20:04:27
【问题描述】:

是否可以使用 android 的数据绑定从 xml 中引用颜色?

这很好用:

android:textColor="@{inputValue == null ? 0xFFFBC02D : 0xFFFFEB3B}"

但事实并非如此:

android:textColor="@{inputValue == null ? @color/red : @color/blue}"

在这里举报:https://issuetracker.google.com/issues/38021292

* 编辑 *

事实证明,只有在极端情况下才会出现 id 问题/错误。我的xml:

    <TextView
        android:id="@+id/input_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{inputValue}"
        android:textColor="@{showAsEmpty ? @color/registerInputEmpty : @color/registerInputSet}"
        tools:text="Select to edit"/>

问题在于 inputValue 参数和 input_value id。它们成为数据绑定中的相同 inputValue 字段。如果您设置自定义颜色,这只是一个问题。来自 Google 的错误,应该会在下次更新中修复。

【问题讨论】:

  • 出了点问题。我猜你还没有定义redblue 颜色资源。它应该与android:textColor="@color/red"android:textColor="@color/blue" 一起使用,所以请检查一下。最后,错误是什么。

标签: android data-binding colors resources android-databinding


【解决方案1】:

是的,您可以参考颜色:

<TextView android:textColor="@{inputValue == null ? @color/red : @color/blue}" .../>

颜色资源以整数形式加载。如果您的属性需要一个 Drawable 并接收一个整数,它会被转换为一个 ColorDrawable。例如:

<View android:background="@{hasError ? @color/errorBg : @color/normalBg}" .../>

如果必须引用资源 ID,请使用 R 值并记住导入 R。这并不常见,但有些 setter 使用资源 ID 而不是值。这在框架视图中并不常见,因为通常存在获取资源值和资源 ID 的设置器,但您可能会在自定义视图中找到它。

【讨论】:

  • 我在我的问题中添加了更多信息。您的第一行不起作用,它在编译时给出错误。查看我更新的问题。
【解决方案2】:

你可以做到的:)

android:textColor="@{inputValue == null ? R.color.red: R.color.blue}"

【讨论】:

  • 那个,我必须明确导入 R。
  • 实际上我认为它显示了错误的颜色,例如,无论我把“红色”和“绿色”放在那里,它总是看起来偏蓝(不同深浅的蓝色)。
  • 它看起来偏蓝,因为R.color.red 不是颜色,它是颜色 ID。您必须通过 ResourcesContextCompat 类处理该 ID。
【解决方案3】:

这是一个google bug:id和参数不能同名:参数inputValue和视图id@id/input_value。它们成为数据绑定中的相同 inputValue 字段。如果您设置自定义颜色,这只是一个问题。来自 Google 的错误,应该会在下次更新中修复。

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多