是否可以获得android layout.xml文件中声明的小部件的属性值



在android应用程序中是否有方法检索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()从一个没有成功的活动中搜索:

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

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

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

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

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

在Android Studio中,您可以获得特定视图可用的方法。输入var name(比如checkbox),然后输入dot(.),它将显示所有可用的方法。开始输入你认为你正在寻找的内容,它会向你展示所有相关的方法。

更新

我认为AttributeSet就是您想要的。你可以这样做:

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

来自文档:

与在上使用实现不同,实现在此处返回位于通用XmlPullParser的顶部,通过检索进行了高度优化aapt在编译时生成的预先计算的信息您的资源例如,getAttributeFloatValue(int,float)方法返回先前存储在已编译的资源,而不是在运行时解析XML文件。

此界面还提供其他信息包含在已编译的XML资源中,但在普通的XML文件,例如getAttributeNameResource(int),它返回与特定XML属性相关联的资源标识符名称

最新更新