android - 以编程方式在 Android 应用程序中获取 xml 命名空间

标签 android xml namespaces

Android 的 AttributeSet.getAttributeIntValueString namespace 作为输入。对命名空间进行硬编码似乎不是一个好主意,因为如果命名空间发生变化,则会引入运行时错误。更具体地说,最好避免

attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto", 
                                                             "myAttribute", 0)

因为它硬编码字符串 "http://schemas.android.com/apk/res-auto",这似乎是不必要的。 (诚​​然,它对 "myAttribute" 进行了硬编码,但这似乎是不可避免的。)是否可以在不对 namespace 进行硬编码的情况下读取整数属性 "myAttribute"? (可能通过命名包含 “myAttribute” 的 xml 文件。)这样,如果出现任何问题,就会生成编译错误。 (例如,该文件不再存在。)或者,如果找不到 "myAttribute" 是否可能产生编译器错误(这也将消除对默认值的需要,因为它永远不会被使用)。

上下文。我扩展了一个 LinearLayout 来覆盖构造函数 LinearLayout(Context context, AttributeSet attrs)LinearLayout(Context context, AttributeSet attrs, int defStyleAttr)。这些构造函数使用 AttributeSet.getAttributeIntValueattrs 中读取属性。因此,代码和 GUI 是完全分开的。但是,如果在 GUI 中更改了 namespace ,那么在代码中硬编码 namespace 时就会出现问题。 (这确实发生了。所以,我想弄清楚如何避免它再次发生!)

最佳答案

如果您需要为您的 View 自定义属性并希望在您的代码中使用它,您可以按照 documentation about custom views .基本上,您在 styleable 中声明您的属性,然后使用 obtainResources 获取它们。

关于android - 以编程方式在 Android 应用程序中获取 xml 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895121/

相关文章:

Android - SeparatedListAdapter - 如何在 onClick 上获得准确的项目位置?

java - 如何使用实时贴纸制作自定义相机

xml - 在Grails问题上呈现XML响应

namespaces - 概念 "stacks"和编程中的代码层

c# - 如何在 C# 中使用 Appium 编写测试用例?

android - 将 ImageView 设置为可绘制对象 (Android)

java - Android Studio (1.5.1) 选择空白 Activity 布局时出现渲染问题

c# - .NET : How to validate XML file with DTD without DOCTYPE declaration

c# - 在soap中,我想将命名空间传递给C#中的header标签

c++ - 使用嵌套的 std 和 posix 命名空间是否未定义?