如何理解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 中的標簽并不是預(yù)定義的,這一點與 HTML 是有區(qū)別的,HTML 中的標簽是預(yù)定義的,所以我們會遇到命名沖突的問題。

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

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

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

命名沖突
在 XML 中,元素名稱是由開發(fā)者定義的,當兩個不同的文檔使用相同的元素名時,就會發(fā)生命名沖突。這個 XML 文檔攜帶著某個表格中的信息:

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

這個 XML 文檔攜帶有關(guān)桌子的信息:

<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文檔攜帶著有關(guān)一件家具的信息:

<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屬性,并在每個標簽前面都添加了相應(yīng)的前綴,這個前綴是一個與某個命名空間相關(guān)聯(lián)的限定名稱,這個前綴就代表后面那個 URI 引用,或者說一個縮寫。

關(guān)于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用于我們應(yīng)用自定義的一些屬性,這個與 Android 自定義屬性和系統(tǒng)控件擴展應(yīng)該有關(guān)系,大家可以再繼續(xù)研究一下。

tools

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

參考文章

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容