使用Android数据绑定时是否可以拥有动态资源路径?

时间:2015-12-30 19:32:29

标签: android data-binding

我在Android应用程序中使用数据绑定,我想根据模型的状态更改字体颜色。像

android:textColor='@{@color/state_ + myobj.state}'

在我的布局中。和

<color name="state_good">#0f0</color>

在我的colors.xml中。这样的事情可能吗?

1 个答案:

答案 0 :(得分:1)

我可以想到两种主要的可能性。

您可能不想要的是让您的模型对象具有返回颜色资源ID(基于其状态)的getter方法。虽然这很简单,但它会违反您关注的典型视图/模型分离,因为模型不应该非常关心渲染颜色。

另一种方法是在某处使用实用程序类,使用静态方法,在给定状态的情况下,返回颜色资源ID。然后,您可以将该类导入<layout>并从表达式中调用它。

例如,此布局导入Html,以便能够调用Html.fromHtml()来处理可能具有HTML格式的字符串(或者,在本例中为HTML实体):

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

  <data>

    <import type="android.text.Html"/>

    <variable
      name="item"
      type="com.commonsware.android.databind.basic.Item"/>
  </data>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
      android:id="@+id/icon"
      android:layout_width="@dimen/icon"
      android:layout_height="@dimen/icon"
      android:layout_gravity="center_vertical"
      android:contentDescription="@string/icon"
      android:padding="8dip"/>

    <TextView
      android:id="@+id/title"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="left|center_vertical"
      android:text="@{Html.fromHtml(item.title)}"
      android:textSize="20sp"/>

  </LinearLayout>
</layout>

在您的情况下,您将导入实用程序类并在static属性中调用android:textColor方法。