Android XML 布局文件和命名空间

2024-03-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. Google 的设计选择是对命名空间尽可能严格,以在编译时处理错误。
  2. 元素上不使用前缀,因为这些元素代表 Java 类:com.android.widget.TextView (com.android.widget.*总是可以被截断)。该类的 java 命名空间将在编译时自动解析,因此这里不欢迎代表完全限定的 java 命名空间的 xml 命名空间。但属性可以映射到 Element 的任何继承的 java 类。因此,属性上的命名空间允许继承。

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

请参阅此博文的两条回复黛安·哈克伯恩一位在 google 工作的知名 Android 工程师:http://www.elharo.com/blog/software-development/xml/2008/09/16/android-xml-weirdness/ http://www.elharo.com/blog/software-development/xml/2008/09/16/android-xml-weirdness/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android XML 布局文件和命名空间 的相关文章