【发布时间】:2015-09-22 23:45:55
【问题描述】:
我正在试用新的 Android Databinding Library,我想使用绑定设置 ToolBar 的背景颜色。默认情况下,颜色应为 colorPrimary(来自主题)。
在我使用 DataBinding 之前,我的工具栏看起来像
<android.support.v7.widget.Toolbar
android:id="@+id/mainToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
/>
添加绑定后,如果没有绑定颜色,我想将其背景设置为 colorPrimary - 我为此使用三元运算符(如指南中所述) - 但它会导致错误,因为主题属性也有“?”操作员在他们的名字之前。编译器认为我正在开始一个新的三元运算。
<data>
<variable name="toolBarBackgroundColor" type="int"/>
</data>
...
<android.support.v7.widget.Toolbar
android:id="@+id/mainToolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@{toolBarBackgroundColor!=0? toolBarBackgroundColor: ?attr/colorPrimary }"
/>
那么有没有办法可以在绑定操作中访问主题属性?谢谢!
编辑
我知道我可以通过编程方式获取 colorPrimary 属性并通过 java 代码绑定它。但我只是想知道是否有基于 Xml 的解决方案。
【问题讨论】:
-
抱歉,我们还不支持主题属性。作为一种解决方法,您可以将其定义为颜色资源值并通过 @color/colorPrimary 在三元中使用它。
-
哦,好的。我将尝试资源价值解决方法。谢谢
-
成功了吗?像
<color name="textColor">?android:attr/textColorPrimary</color>一样使用它 -
@yigit 关于支持主题属性的任何更新?
-
不,这不太可能发生。首先,大多数视图只在其构造函数中解析这些。 View 类上没有动态的
setStyle方法。一个解决方案可能是解析应用程序样式,找出设置了哪些值,然后在视图上找到它们的设置器,但这并不可靠,因为样式从设备样式扩展而来,可以由制造商自定义。
标签: android data-binding android-theme