3

android 应用程序中有没有办法检索在 a 中声明的小部件的属性值layout.xml

例如在我的layout.xml文件中,我有:

<CheckBox
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="@string/clean_filesWithoutVideo"
     android:checked="@{uiprefs.switchButtonEditable}"
     android:id="@+id/checkbox_updateable" />

我想检索 的文字android:checked,例如我想"@{uiprefs.switchButtonEditable}"在运行时检索。

我在android.content.res.Resources课堂上使用getResources()Activity 进行搜索但没有成功:

  • 我无法将 xml 文件作为流获取。
  • 通过 解析属性Resources.getLayout()不会恢复属性值。

也许这个值隐藏在CheckBox实例中的某个地方,但我在调试时使用检查找不到它......

注意:我要检索的值尤其是数据绑定文字。也许我可以通过数据绑定 API 检索它?

4

1 回答 1

1

每个 UI 组件都有自己的 getter 和 setter,您可以通过它们检索当前设置的属性或设置您想要的属性。如果视图之间的属性是通用的,例如高度/宽度,则 getter 将在 View 类中可用。
在您的情况下,您可以通过以下方式获取检查属性:

CheckBox checkbox =  (CheckBox) view.findViewById(R.id.checkbox_updateable);
boolean initialState = checkbox.isChecked();

在 Android Studio 中,您可以获得可用于特定视图的方法。输入变量名称(比如复选框),然后输入点 (.),它将显示所有可用的方法。开始输入您认为正在寻找的内容,它会向您显示所有相关方法。

更新

我认为AttributeSet是您正在寻找的。你可以这样做 :

 XmlPullParser parser = resources.getXml(myResource);
 AttributeSet attributes = Xml.asAttributeSet(parser);

来自文档:

此处返回的实现与在通用 XmlPullParser 之上使用实现不同,它通过检索由 aapt 在编译资源时生成的预先计算的信息进行了高度优化。例如,getAttributeFloatValue(int, float) 方法返回一个先前存储在编译资源中的浮点数,而不是在运行时解析最初在 XML 文件中的字符串。

此接口还提供了包含在已编译 XML 资源中的附加信息,这些信息在普通 XML 文件中不可用,例如 getAttributeNameResource(int),它返回与特定 XML 属性名称关联的资源标识符。

于 2015-11-30T11:06:46.283 回答