什么是`app` Android XML命名空间?
什么是`app` Android XML命名空间?
这是我从res/menu/main.xml
文件中看到的app
命名空间的一个例子。
app
命名空间的作用是什么?它是一个“标准”的Android XML命名空间吗?如果在两个不同的命名空间中放置相同属性的相同值选项是否都可用(例如app:showAsAction
和android:showAsAction
)。
根据文档:
android:showAsAction=[\"ifRoom\" | \"never\" | \"withText\" | \"always\" | \"collapseActionView\"]
也就是说,如果上面的示例中的属性是以下属性,则该行是否会有不同的含义:
android:showAsAction="never"
它看起来几乎像是某种“子类化”机制,但我似乎找不到来自Google/Android源的有关app
命名空间的任何真实文档。
你可以从这个链接中获得一些解释
命名空间声明
使用保留的XML属性xmlns或xmlns:prefix声明XML命名空间,其值必须是有效的命名空间名称。例如,以下声明将"xhtml:"前缀映射到XHTML命名空间:
xmlns:xhtml="http://www.w3.org/1999/xhtml"
如果具有以上命名空间声明的元素或属性名称以前缀"xhtml:"开头,则被认为属于XHTML命名空间。
还可以声明默认命名空间。例如:
xmlns="http://www.w3.org/1999/xhtml"
在这种情况下,如果具有上述默认命名空间声明的元素或其祖先中没有命名空间前缀的元素都被认为属于XHTML命名空间。
如果在作用域内没有默认命名空间声明,则命名空间名称没有值。在这种情况下,没有显式命名空间前缀的元素被认为不属于任何命名空间。
属性永远不受默认命名空间的影响。没有显式命名空间前缀的属性被认为不属于任何命名空间。
app
命名空间并不特定于库,而是用于定义在您的应用中的所有属性,无论是由您的代码还是您导入的库定义,从而为自定义属性创建一个单一的全局命名空间 - 例如,未由Android系统定义的属性。
在这种情况下,appcompat-v7
库使用自定义属性来映射 android:
命名空间的属性以支持 Android 的早期版本(例如: android:showAsAction
只添加到 API11 中,但是 app:showAsAction
(作为您的应用程序的一部分提供)适用于您的应用程序工作的所有 API 级别)- 显然,在未定义该属性的 API 级别使用 android:showAsAction
将无法工作。