什么是' app' Android XML命名空间?

时间:2014-11-01 19:23:29

标签: android xml android-layout xml-namespaces android-tools-namespace

以下是我在app文件中看到的res/menu/main.xml命名空间的示例

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="never" />
</menu>

app命名空间的用途是什么?它是一个&#34;标准&#34; Android XML命名空间?相同的值选项是否可用于放置在两个不同命名空间中的相同属性(例如app:showAsActionandroid:showAsAction)。

来自docsandroid:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

即,如果属性改为,上面示例中的行是否意味着其他内容:

android:showAsAction="never"

它几乎看起来可能是某种&#34;子类化&#34;机制,但我似乎无法在Google / Android来源的app命名空间中找到任何真实的文档。

2 个答案:

答案 0 :(得分:198)

app命名空间并非特定于库,但它用于应用程序中定义的所有属性,无论是通过您的代码还是通过您导入的库,有效地为自定义属性创建单个全局命名空间 - 即,属性没有由android系统定义。

在这种情况下,appcompat-v7库使用镜像android:命名空间的自定义属性来支持以前版本的android(例如:android:showAsAction仅在API11中添加,但是{{ 1}}(作为应用程序的一部分提供)适用于您的应用程序所做的所有API级别) - 显然使用app:showAsAction不适用于未定义该属性的API级别。

答案 1 :(得分:1)

您可以从此链接中获得一些解释

XML namespace

  

命名空间声明   使用保留的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名称空间中。

     

如果范围中没有默认的名称空间声明,则名称空间名称没有值。[6]在这种情况下,没有显式命名空间前缀的元素将被视为不在任何命名空间中。

     

属性永远不受默认名称空间的约束。没有显式名称空间前缀的属性被认为不在任何名称空间中。