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

时间:2015-11-30 10:32:43

标签: android android-layout android-widget android-resources android-databinding

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检索它?

1 个答案:

答案 0 :(得分:1)

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

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

在Android Studio中,您可以获取特定视图的可用方法。输入var name(比如复选框),然后输入点(。),它将显示所有可用的方法。开始输入您认为自己正在寻找的内容,它会显示所有相关方法。

更新

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

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

来自doc:

  

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

     

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