美文网首页AndroidAndroid学习Android
如何理解Android中的xmlns

如何理解Android中的xmlns

作者: xixizhou | 来源:发表于2016-08-02 20:32 被阅读8289次

    作为一名 Android 开发,我想大家对xmlns并不会陌生,因为在写布局文件(如下代码所示)的时候经常会碰到,虽然很多人对其含义并不是特别了解(比如说我)。好吧,今天我们就来挖一挖这神奇的xmlns

    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/window_background">
    </LinearLayout>
    
    

    什么是xmlns

    首先,我们先来看下到底什么是xmlns,它是 XML 文档中的一个概念:英文叫做 XML namespace,中文翻译为 XML 命名空间。一讲到命名空间,我想很多人会联想到C++中的namespaceJava中的 packagename,而这两者的作用都是为了解决命名上的冲突(例如类名,接口名等)。类似的,XML namespace也是为了解决 XML 中元素和属性命名冲突,因为 XML 中的标签并不是预定义的,这一点与 HTML 是有区别的,HTML 中的标签是预定义的,所以我们会遇到命名冲突的问题。

    XML 命名空间定义语法为xmlns:namespace-prefix="namespaceURI",一共分为三个部分:

    • xmlns:声明命名空间的保留字,其实就是XML中元素的一个属性;
    • namespace-prefix:命名空间的前缀,这个前缀与某个命名空间相关联;
    • namespaceURI:命名空间的唯一标识符,一般就是一个URI引用。

    通过上面的内容的讲解,我们对命名空间有了一定的了解,下面我们通过一个例子引用来说明一下xmlns属性是如何解决命名冲突的:

    命名冲突
    在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。这个 XML 文档携带着某个表格中的信息:

    <table>
       <tr>
       <td>Apples</td>
       <td>Bananas</td>
       </tr>
    </table>
    

    这个 XML 文档携带有关桌子的信息:

    <table>
       <name>African Coffee Table</name>
       <width>80</width>
       <length>120</length>
    </table>
    

    假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。XML 解析器无法确定如何处理这类冲突。

    使用命名空间(Namespace)
    这个XML文档携带着某个表格中的信息:

    <h:table xmlns:h="http://www.w3.org/TR/html4/">
       <h:tr>
       <h:td>Apples</h:td>
       <h:td>Bananas</h:td>
       </h:tr>
    </h:table>
    

    此XML文档携带着有关一件家具的信息:

    <f:table xmlns:f="http://www.w3school.com.cn/furniture">
       <f:name>African Coffee Table</f:name>
       <f:width>80</f:width>
       <f:length>120</f:length>
    </f:table>
    

    我们为<table>标签添加了一个xmlns属性,并在每个标签前面都添加了相应的前缀,这个前缀是一个与某个命名空间相关联的限定名称,这个前缀就代表后面那个 URI 引用,或者说一个缩写。

    关于xmlns就先简单讲到这里,大家如果要深入了解的话,可以点击本文中的跳转链接,下一节我们来看下 Android 中的那些xmlns。

    Android中的xmlns

    在Android中,目前我们碰到的xmlns一共有三种:

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    

    android

    命名空间android用于 Android 系统定义的一些属性。

    app

    命名空间app用于我们应用自定义的一些属性,这个与 Android 自定义属性和系统控件扩展应该有关系,大家可以再继续研究一下。

    tools

    根据官方定义,tools命名空间用于在 XML 文档记录一些,当应用打包的时候,会把这部分信息给过滤掉,不会增加应用的 size,说直白点,这些属性是为IDE提供相关信息。

    参考文章

    Tools Attributes
    What does “xmlns” in XML mean
    What is the 'app' Android XML namespace

    相关文章

      网友评论

      • 冰魄城主:现在的这些人,不懂就别瞎jb写,特别是android,写的都是些似懂非懂的东西,1w子的东西有用的也就一点点
      • 冰魄城主:为啥你在用res-auto时候变灰但是编译通过,很明显你没有用到它,你用的都是android自带的东西,
      • 冰魄城主:说了半天没说到点子上,res-auto就是你在xml中需要一些你自定义的属性时候,就用的上的东西,
      • 7747a8fe5739:如果可以:请详细介绍下xmlns=“”后面的URI资源标识符是如何与Android SDK关联起来的,感激不尽,目前这个太表象了
      • Bury丶冬天:怎么自定义一个xmlns约束?就是我不自定义View,但是想自己写一个命名空间,增加View的属性
      • e279b6726707:没有说详尽。

      本文标题:如何理解Android中的xmlns

      本文链接:https://www.haomeiwen.com/subject/hrfqsttx.html