Android XML布局文件和命名空间

fhu*_*cho 20 xml android

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

xmlns:android="http://schemas.android.com/apk/res/android"
Run Code Online (Sandbox Code Playgroud)

元素示例:

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
  1. 为什么使用android前缀而不是省略它xmlns="http...
  2. 为什么前缀仅用于属性而不用于元素?

pca*_*ans 8

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

  1. 谷歌的设计选择是在命名空间上尽可能严格,以便在编译时处理错误.
  2. 因为论文是代表Java类前缀不上的元素应用于:com.android.widget.TextView(com.android.widget.*总可以截断).此类的java命名空间将在编译时自动解析,因此此处不欢迎表示完全限定的Java命名空间的xml命名空间.但是属性可以映射到Element的任何继承的java类.因此,属性上的命名空间允许继承.

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

请参阅Dianne Hackborn对此博客文章的两篇回复,他是一位着名的在谷歌工作的安卓工程师:http://www.elharo.com/blog/software-development/xml/2008/09/16/android-xml-怪事/