使用BindingAdapter优化设置textview的样式

时间:2018-07-28 08:47:30

标签: android optimization android-styles android-databinding

我想根据特定条件设置errno的样式,并且在项目中使用数据绑定。我可以使用TextView来做到这一点。

BindingAdapter

xml

public final class BindingAdapters {

    @BindingAdapter({"bindStyle"})
    public static void setFontStyle(TextView textView, String typefaceName) {
        textView.setTextAppearance(context, typefaceName.equals(context.getResources().getString(R.string.string1)) ? R.style.style1 : R.style.style2);}
}

在这里,我在strings.xml中声明了两个字符串,并根据条件和所传递的字符串,将其中一个字符串传递给app:bindStyle="@{val ==xyz ? @string/string1: @string/string2}" 方法,我正在确定要设置的样式。

但是我想知道还有更好的方法吗?有什么方法可以直接将样式传递给setFontStyle方法并将其设置为setFontStyle,以便该方法可以用于整个项目。还是使用数据绑定设置样式的其他更好方法?

1 个答案:

答案 0 :(得分:1)

  

您可以创建如下所示的绑定适配器。

 @BindingAdapter({"bindStyle"})
        public static void setFontStyle(TextView textView, String text) {
            if (text.equals("value"))
                textView.setTextAppearance(textView.getContext(), R.style.SettingHeading);
            else
                textView.setTextAppearance(textView.getContext(), R.style.SettingText);
        }
  

XML

         <data>
            <variable
                name="val"
                type="String" />
        </data>

     app:bindStyle="@{val}"

为什么需要两次检查条件才能应用样式。可以将逻辑放入绑定适配器本身,并相应地应用样式。