我在Android应用程序中使用数据绑定,我想根据模型的状态更改字体颜色。像
android:textColor='@{@color/state_ + myobj.state}'
在我的布局中。和
<color name="state_good">#0f0</color>
在我的colors.xml中。这样的事情可能吗?
答案 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
方法。