Android 的 AttributeSet.getAttributeIntValue
将 String 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.getAttributeIntValue
从 attrs
中读取属性。因此,代码和 GUI 是完全分开的。但是,如果在 GUI 中更改了 namespace ,那么在代码中硬编码 namespace 时就会出现问题。 (这确实发生了。所以,我想弄清楚如何避免它再次发生!)
最佳答案
如果您需要为您的 View 自定义属性并希望在您的代码中使用它,您可以按照 documentation about custom views .基本上,您在 styleable
中声明您的属性,然后使用 obtainResources
获取它们。
关于android - 以编程方式在 Android 应用程序中获取 xml 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895121/