为啥我们在 android xml 文件中指定命名空间?

Posted

技术标签:

【中文标题】为啥我们在 android xml 文件中指定命名空间?【英文标题】:Why do we specify namespace in android xml file?为什么我们在 android xml 文件中指定命名空间? 【发布时间】:2011-08-16 22:27:55 【问题描述】:

当我们在 android 中编写基于 xml 的布局时,我们使用字符串“xmlns:android="http://schemas.android.com/apk/res/android”。

从我读过的书中说这是一个命名空间,但我们为什么要使用它呢?该链接甚至不存在。那么这个有什么用呢?

【问题讨论】:

【参考方案1】:

来自 developer.android.com

xmlns:android

定义 Android 命名空间。此属性应始终设置为“http://schemas.android.com/apk/res/android”。

xmlns:android 用于标识此xml用于android,而不是用于其他功能。

命名空间唯一标识代码/库。如果我编写一个使用所有相同名称的 api,例如 android api,那么区分我的 api 和 android api 的唯一方法是使用 android 命名空间,或者我的。

您可以进一步参考http://en.wikipedia.org/wiki/XML_namespace

【讨论】:

我的意思是,这是命名空间的定义,但它没有涉及为什么。像这样放它,如果我将命名空间设置为空白,则没有任何作用。为什么?【参考方案2】:

您可能想对 XML 做一些一般性的阅读。 w3.org's XML documentation 可能是你最好的。

不过,通常使用命名空间是为了避免元素名称之间发生冲突。

例如,如果我创建了一个定义元素 <person> 的 XML 模式,而我的朋友创建了一个单独的 XML 模式,该模式定义了一个完全不同的元素,也恰好名为 <person>,我们可能会发生冲突。如果我尝试在 XML 文件中引用这两个元素,则无法分辨哪个是哪个。但是,如果我们使用命名空间,myNamespace:person 显然不同于 myFriendsNamespace:person。

定义命名空间的标准是使用 URI,这就是您在 Android 定义中看到它的原因。这并不一定意味着架构存在于该位置,这意味着 URI 是该命名空间的唯一名称。

【讨论】:

我的意思是,这是命名空间的作用的定义,但它没有触及原因。像这样放它,如果我将命名空间设置为空白,则没有任何作用。为什么? 你只是不明白为什么我们不明白为什么命名空间在 xml 中是这样定义的。 xmlns 明确表示 xml 命名空间。好的。然后我们看到一个冒号和android。这似乎已将 ANDROID 定义为命名空间。未来的代码告诉我android真的是一个命名空间,例如:android:icon android:minSdkVersion。所以我的问题是,为什么 url 看起来与代码不同?对我来说似乎是无稽之谈。所以请不要乱想。【参考方案3】:

正如您将在您的 XML 中引用 android 定义键一样。因此,资源将使用命名空间识别键,这就是我们在每个 Android XML 文件中定义命名空间的原因,例如:- "xmlns:android="http://schemas.android.com/apk/res/android".

现在在 XML 中,您可以使用 android 标记来引用键,例如:-

<FrameLayout
        android:id="@+id/id"
        android:layout_
        android:layout_
        android:background="@color/color">

使用 android 命名空间,您可以找到键 idlayout_widthlayout_height

更多信息请参考here。

【讨论】:

【参考方案4】:

链接确实不存在..但是我们使用的字符串是用于声明命名空间的... 在 XML 中,命名空间用于避免命名冲突。 您可以参考此链接以获得更多说明 http://www.w3schools.com/XML/xml_namespaces.asp

【讨论】:

以上是关于为啥我们在 android xml 文件中指定命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

为啥hadoop没有将数据放在hdfs-site.xml中指定的目录中

为啥我们需要在 bindParam() 中指定参数类型?

servlet 过滤器是不是必须在 web.xml 文件中指定?

为啥命名空间限定节点没有 XPath 语法?

Android - 自定义样式中指定的边距未生效

npm 脚本使用 package.json 中指定的版本重命名文件