为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

PIPIONE 2019-09-19 09:51:03

这是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命名空间的用途是什么?它是“标准”Android XML命名空间吗?是否有相同的值选项可用于放置在两个不同命名空间中的相同属性(例如app:showAsAction和android:showAsAction)。


来自文档: android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]


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


android:showAsAction="never"

它几乎看起来可能是某种“子类化”机制,但我似乎无法app从Google / Android源找到任何关于命名空间的真实文档。


查看完整描述

3 回答

?
智慧大石

app命名空间是不特定的库,但它是用于在你的应用程序中定义的所有属性,无论是你的代码或库导入,有效地使属性自定义一个全局命名空间-也就是说,属性不是由Android系统定义。

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


查看完整回答
反对 回复 2019-09-19
?
慕姐8265434

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

XML命名空间

命名空间声明使用保留的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] 在这种情况下,没有显式名称空间前缀的元素被认为不在任何名称空间中。

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


查看完整回答
反对 回复 2019-09-19
?
幕布斯5086720

静默忽略不存在的属性。创建自定义属性时,您可以保证自定义属性在运行时存在(显然:它的定义包含在您的应用中)。因此,支持库使用自定义属性,以便它们用于构建菜单的自定义代码可以使用适用于所有API版本的单个代码路径,从而基本上取代了使用这些android:版本的任何需求。

查看完整回答
反对 回复 2019-09-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信