我有 XML 布局代码:
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
<variable name="info" type="com.mycompany.orm.binders.MyBinderObject"/>
</data>
<android.support.percent.PercentRelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:gravity="end">
...
这很有效。但是,我在MyBinderObject
内有一个名为mygravity
的属性,它被设置为两个字符串之一:start
或end
。我试图弄清楚如何阅读数据绑定属性mygravity
以将重力分配给布局。
即,android:gravity="@{info.mygravity}"
(但是,这一行不起作用。编译时数据绑定代码失败)。
有没有人知道如何根据数据绑定对象属性动态设置android:gravity
?
答案 0 :(得分:5)
我在MyBinderObject中有一个名为mygravity的属性,它被设置为两个字符串之一:start或end。
存在的问题是:您正在做一些合理的事情,并将布局XML视为XML。
布局XML属性值可以是各种类型。有时,这很明显,例如android:enabled="false"
或android:layout_width="30sp"
。并且,有时,类型实际上是字符串或字符串资源引用(例如,android:text="Foo"
)。但有时属性值看起来像英语字符串,但它实际上是一组枚举值之一(例如,重力值)。
我没有意识到引力实际上是一个枚举属性
粗略的经验法则:如果将值翻译成另一种语言,如果构建失败,则它是枚举属性(例如,android:gravity="fin"
而不是android:gravity="end"
,假设Google翻译给了我合理的西班牙语......)。如果翻译的值可以正常工作,那么它就是任何有效的字符串或(通常)字符串资源。
我试图找出如何读取数据绑定属性mygravity以将重力分配给布局。
您必须将字符串值变换为等同的Gravity
常量,如Gravity.START
。
答案 1 :(得分:-1)
你绝对可以在布局文件中使用android:gravity="@{info.mygravity}"
,但要确保mygravity应该是int值。
你应该参考this
如果您想要center
重力,info.mygravity
的值应为Gravity.CENTER