Android XML布局文件和命名空间

20

Android的布局是在XML中定义的,根元素中声明了此命名空间:

xmlns:android="http://schemas.android.com/apk/res/android"

元素的示例:

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" />
  1. 为什么使用 android 前缀而不像 xmlns="http... 那样省略它?
  2. 为什么前缀只在属性中使用,而不在元素中使用?
1个回答

8
有趣的问题!它确实感觉有点奇怪。
1. Google选择严格对命名空间进行限制,以便在编译时处理错误。 2. 元素上不使用前缀是因为它们代表Java类:com.android.widget.TextViewcom.android.widget.*可以随时截断)。这个类的Java命名空间将在编译时自动解析,因此不欢迎表示完全限定Java命名空间的XML命名空间。但是属性可以映射到元素的任何继承Java类。因此,属性上有命名空间以允许继承。
主要是这样做,因为布局描述了Java对象,Google在这里使用XML命名空间机制来帮助映射您的布局与Java对象。因此,在Java命名空间世界和XML命名空间世界之间存在冲突。这也允许我们开发人员子类化元素、添加自己的属性,而不必担心平台的下一个版本可能会添加具有相同名称的属性。
请参见谷歌工程师Dianne Hackborn的这篇博客文章的两条回复:http://www.elharo.com/blog/software-development/xml/2008/09/16/android-xml-weirdness/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接