• 如何理解Android中的xmlns


    转发自:https://www.jianshu.com/p/6fcaffaeffd2

    作为一名 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

  • 相关阅读:
    机器学习--强化学习
    机器学习--深度学习
    机器学习--维度灾难
    机器学习--最优化
    机器学习--降维
    机器学习--聚类
    机器学习--模型提升
    Git和gitHub用户名 邮箱
    Git线上操作
    版本控制器:Git
  • 原文地址:https://www.cnblogs.com/yycc/p/11549395.html
Copyright © 2020-2023  润新知