有没有办法在视图创建期间通过数据绑定读取视图属性?

Is there a way to read a view attribute via databinding during view creation?

我正在使用数据绑定并尝试编写一些设置。我有一个视图,我想通过自定义属性(传入枚举)来确定其布局。例如,传入 Setting.CHECKBOXSetting.SWITCH 应该让我为视图膨胀适当的控件。视图定义如下:

<data>
<import type="com.mypackage.ui.SettingView.SettingControl" />

<SettingView
    android:id="@+id/setting_foo
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    setting:control="@{Setting.CHECKBOX} />
...

有没有一种方法可以在布局膨胀之前读取 setting:control 属性?根据设置,我想指定如何给 SettingView 充气。

我知道我可以通过自定义实现 attributes/styleables,但我想知道是否可以通过数据绑定实现。

没有。为了在inflation期间查看属性值,不能使用数据绑定语法。数据绑定将从 XML 中剥离值并将其添加到生成的绑定代码中。

相反,将属性添加到 attrs.xml 文件并使用正常语法分配值。然后,您可以使用 context.obtainedStyledAttributes() 读取属性并通过 TypedArray.

访问值