为什么要在Android XML文件中指定命名空间?

38

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

从我所读的书籍中可以得知这是一个命名空间,但为什么要使用它呢?这个链接甚至不存在。那么它有什么用处呢?

4个回答

29

来自developer.android.com

xmlns:android

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

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

命名空间唯一地标识代码/库。如果我编写一个使用与Android API相同名称和格式的API,则区分我的API和Android API的唯一方法是使用Android命名空间或使用我的API命名空间。

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


2
我的意思是,这是命名空间的定义,但它没有涉及到为什么。就像这样,如果我将命名空间留空,什么都不起作用。为什么? - bharal

20

您可能需要阅读一些关于XML的通用知识。 w3.org的XML文档 可能是您最好的选择。

总的来说,命名空间(namespace)的作用是为了避免元素名称之间的冲突。

例如,如果我创建了一个定义了元素<person>的XML模式(schema),而我的朋友创建了一个名为<person>的完全不同的元素的单独的XML模式(schema),那么我们可能会发生冲突。如果我尝试在XML文件中引用这两个元素,就没有办法知道哪个是哪个。然而,如果我们使用命名空间,例如myNamespace:person 就显然不同于 myFriendsNamespace:person。

定义命名空间的标准方式是使用URI,这就是为什么在Android定义中看到URI的原因。这并不一定意味着该模式存在于该位置,而是意味着URI是该命名空间的唯一名称。


我的意思是,这是命名空间的定义,但它没有触及其中的原因。这样说吧,如果我将命名空间留空,什么也不会发生。为什么? - bharal
你不理解为什么我们不理解为什么在xml中命名空间被定义成这样。xmlns显然意味着xml命名空间。好的。然后我们看到一个冒号,接着是android。那似乎已经将android定义为命名空间。未来的代码向我展示了android确实是一个命名空间,例如:android:icon android:minSdkVersion。所以我的问题是,为什么url这样的东西是代码的一部分?对我来说似乎毫无意义。所以请让我清醒吧。 - user9599745

4

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

现在,在XML中,您可以使用android标记引用键,如下所示:

<FrameLayout
        android:id="@+id/id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/color">

使用android命名空间,您可以找到键id、layout_width和layout_height。
有关更多信息,请参见此处

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接