【问题标题】:How can I use Android DataBinding to dynamically change android:layout property?如何使用 Android DataBinding 动态更改 android:layout 属性?
【发布时间】:2017-03-23 21:27:54
【问题描述】:

我有 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 的属性,它被设置为两个字符串之一:startend。我想弄清楚如何读取 Data Binding 属性 mygravity 以将重力分配给布局。

android:gravity="@{info.mygravity}"(但是,此行不起作用。编译时数据绑定代码失败)。

有谁知道如何根据数据绑定对象属性动态设置android:gravity

【问题讨论】:

  • "它被设置为两个字符串之一" -- android:gravity 不接受字符串。它采用一组枚举属性值中的一个。我的猜测是您需要将该字符串转换为the equivalent Gravity constant
  • 是的!就是这样。我没有意识到 gravity 实际上是一个枚举属性。把这个放在答案中,我会接受。

标签: java android layout data-binding


【解决方案1】:

我在 MyBinderObject 中有一个名为 mygravity 的属性,它被设置为两个字符串之一:开始或结束。

问题就在这里:您正在做一些合理的事情并将布局 XML 视为 XML。

布局 XML 属性值可以是多种类型。有时,这很明显,例如android:enabled="false"android:layout_width="30sp"。而且,有时,类型实际上是字符串或字符串资源引用(例如,android:text="Foo")。但有时属性值看起来像一个英文字符串,但它实际上是一组枚举值(例如重力值)中的一个。

我没有意识到重力实际上是一个枚举属性

一个粗略的经验法则:如果将值翻译成另一种语言,构建会失败,那么它是一个枚举属性(例如,android:gravity="fin" 而不是android:gravity="end",假设谷歌翻译给了我合理的那里有西班牙语...)。如果翻译后的值可以正常工作,那么它是任何有效的字符串或(通常)字符串资源。

我试图弄清楚如何读取数据绑定属性 mygravity 以将重力分配给布局。

您必须将字符串值转换为等效的 Gravity 常量,例如 Gravity.START

【讨论】:

    【解决方案2】:

    你绝对可以在布局文件中使用android:gravity="@{info.mygravity}",但要确保 mygravity 应该是 int 值。

    你应该参考this

    如果你想要center重力,info.mygravity的值应该是Gravity.CENTER

    【讨论】:

      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2015-03-10
      • 2019-08-11
      • 2011-05-03
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多