Android 布局是在 XML 中定义的,在根元素中声明了这个命名空间:
xmlns:android="http://schemas.android.com/apk/res/android"
元素示例:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" />
- 为什么使用
android
前缀而不是像xmlns="http...
那样省略它? - 为什么前缀只用在属性中而不用在元素中?
最佳答案
有趣的问题!确实感觉有点怪。
- Google 的设计选择是在命名空间上尽可能严格以在编译时处理错误。
- 在元素上不使用前缀,因为这些代表 Java 类:
com.android.widget.TextView
(com.android.widget.*
总是可以被截断)。此类的 java 命名空间将在编译时自动解析,因此这里不欢迎代表完全限定的 java 命名空间的 xml 命名空间。但是属性可以映射到 Element 的任何继承的 java 类。因此,属性上的命名空间允许继承。
这样做主要是因为布局描述了 Java 对象,而 Google 在这里使用 XML 命名空间机制来帮助将布局与 Java 对象映射。因此,Java 命名空间世界和 XML 命名空间世界之间存在冲突。 它还允许我们开发人员对元素进行子类化,添加我们自己的属性,而不必担心下一个版本的平台可能会添加同名的属性。
请参阅 Dianne Hackborn 对这篇博文的两条回复,他是一位在 google 工作的知名 android 工程师:http://www.elharo.com/blog/software-development/xml/2008/09/16/android-xml-weirdness/
关于Android XML 布局文件和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5404560/