如何理解Android中的xmlns

作為一名 Android 開發(fā),我想大家對xmlns并不會陌生,因為在寫布局文件(如下代碼所示)的時候經(jīng)常會碰到,雖然很多人對其含義并不是特別了解(比如說我)。好吧,今天我們就來挖一挖這神奇的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 命名空間。一講到命名空間,我想很多人會聯(lián)想到C++中的namespaceJava中的 packagename,而這兩者的作用都是為了解決命名上的沖突(例如類名,接口名等)。類似的,XML namespace也是為了解決 XML 中元素和屬性命名沖突,因為 XML 中的標簽并不是預定義的,這一點與 HTML 是有區(qū)別的,HTML 中的標簽是預定義的,所以我們會遇到命名沖突的問題。

XML 命名空間定義語法為xmlns:namespace-prefix="namespaceURI",一共分為三個部分:

  • xmlns:聲明命名空間的保留字,其實就是XML中元素的一個屬性;
  • namespace-prefix:命名空間的前綴,這個前綴與某個命名空間相關聯(lián);
  • namespaceURI:命名空間的唯一標識符,一般就是一個URI引用。

通過上面的內(nèi)容的講解,我們對命名空間有了一定的了解,下面我們通過一個例子引用來說明一下xmlns屬性是如何解決命名沖突的:

命名沖突
在 XML 中,元素名稱是由開發(fā)者定義的,當兩個不同的文檔使用相同的元素名時,就會發(fā)生命名沖突。這個 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 文檔被一起使用,由于兩個文檔都包含帶有不同內(nèi)容和定義的 <table> 元素,就會發(fā)生命名沖突。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>

我們?yōu)?code><table>標簽添加了一個xmlns屬性,并在每個標簽前面都添加了相應的前綴,這個前綴是一個與某個命名空間相關聯(lián)的限定名稱,這個前綴就代表后面那個 URI 引用,或者說一個縮寫。

關于xmlns就先簡單講到這里,大家如果要深入了解的話,可以點擊本文中的跳轉(zhuǎn)鏈接,下一節(jié)我們來看下 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 系統(tǒng)定義的一些屬性。

app

命名空間app用于我們應用自定義的一些屬性,這個與 Android 自定義屬性和系統(tǒng)控件擴展應該有關系,大家可以再繼續(xù)研究一下。

tools

根據(jù)官方定義,tools命名空間用于在 XML 文檔記錄一些,當應用打包的時候,會把這部分信息給過濾掉,不會增加應用的 size,說直白點,這些屬性是為IDE提供相關信息。

參考文章

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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,098評論 25 708
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,955評論 1 7
  • 打開終端cd 進入項目根目錄(即工程文件所在目錄)輸入以下命令find . "(" -name "*.m" -or...
    陌上北辰閱讀 575評論 0 0
  • 童年的記憶,模糊中總是和父親的背分不開的,腦海里會浮現(xiàn)很多場面。 我的童年是從四歲開始的,那一年,...
    玉冰蓮閱讀 742評論 0 0