Android XML布局文件和名称空间

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. 为什么前缀只用于属性而不用于元素?

Solutions Collecting From Web of "Android XML布局文件和名称空间"

有趣的问题! 它确实感觉有点奇怪。

  1. Google的deviseselect是在命名空间上尽可能严格地在编译时处理错误。
  2. 前缀不在元素上使用,因为这些代表Java类: com.android.widget.TextViewcom.android.widget.*总是可以被截断)。 这个类的java名字空间将在编译时自动parsing,所以表示完全限定的java名字空间的xml名字空间在这里是不受欢迎的。 但是可以将属性映射到元素的任何inheritance的java类。 因此属性上的命名空间允许inheritance。

这是这样做的,主要是因为布局描述了Java对象,Google在这里使用XML名称空间机制来帮助将布局映射到Java对象。 所以Java命名空间世界和XML命名空间世界之间存在冲突。 它还允许我们的开发人员对元素进行子类化,添加我们自己的属性,而不必担心下一个版本的平台可能会添加一个具有相同名称的属性。

请参阅在Google工作的着名Android工程师Dianne Hackborn发表的两篇博文: http : //www.elharo.com/blog/software-development/xml/2008/09/16/android-xml-怪事/