xmlns:android="http://schemas.android.com/apk/res/android
什么是xmlns
xmlns,它是 XML 文檔中的一個概念:英文叫做 XML namespace,中文翻譯為 XML 命名空間。
一講到命名空間,我想很多人會聯想到C++中的namespace和Java中的 packagename,而這兩者的作用都是為了解決命名上的沖突(例如類名,接口名等)。
類似的,XML namespace也是為了解決 XML 中元素和屬性命名沖突,因為 XML 中的標簽並不是預定義的,這一點與 HTML 是有區別的,HTML 中的標簽是預定義的,所以我們會遇到命名沖突的問題。
XML 命名空間定義語法為xmlns:namespace-prefix=”namespaceURI”,一共分為三個部分:
- xmlns:聲明命名空間的保留字,其實就是XML中元素的一個屬性;
- namespace-prefix:命名空間的前綴,這個前綴與某個命名空間相關聯;
- namespaceURI:命名空間的唯一標識符,一般就是一個URI引用。
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提供相關信息
使用到自定義View的xml布局文件
Android 自定義的xmlns其實很簡單,語法規則是: xmlns:前綴=http://schemas.android.com/apk/res/你的應用程序包路徑.
一般情況下,我們引用“apk/res-auto”就讓app能夠訪問res下所有資源的能力,當然如果想讓其只能訪問某個res資源,只需要引用“包名/apk/res/具體屬性文件夾”即可。
xmlns:tools的用法
在布局中,任意xml標簽下添加代碼:
xmlns:tools="http://schemas.android.com/tools"
之后,我們便能使用android為我們提供的tools,先舉個開發過程中的案例:
有時候在布局一個xml的過程中需要查看某個TextView的文字效果,於是指定了android:Text =
“客戶們都是笨蛋”;這時,產品上線,結果忘了刪除這行代碼,數據加載也沒有重新設置text內容。
這種場面是不是就很尷尬了?使用tools標簽就能夠避免這樣的尷尬,我們在xml布局中加入tools:text=”客戶們都是笨蛋”,預覽中就會顯示出 客戶們都是笨蛋
但實際上,如果運行的話,是看不到這條text的。
除此之外,tools:標簽幾乎支持所有android:的同名標簽,比如tools:src、tools:textSize等,可以自己進行探索。
總之,tools的作用就是能夠方便開發者在開發過程中提前預覽xml布局而對之后的運行結果不產生影響,挺方便的一個工具。
參考:
http://www.jianshu.com/p/6fcaffaeffd2