首页 文章

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

提问于
浏览
143

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

<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 名称空间的用途是什么?它是一个"standard" Android XML命名空间吗?相同的值选项是否可用于放置在两个不同命名空间中的相同属性(例如 app:showAsActionandroid:showAsAction ) .

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

也就是说,如果属性是相反的,上面例子中的行是否意味着其他内容:

android:showAsAction="never"

它几乎看起来可能是某种"subclassing"机制,但我似乎无法从Google / Android源代码中找到关于 app 命名空间的任何真实文档 .

1 回答

  • 186

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

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

相关问题