1. 程式人生 > >xml中的android、app、tools

xml中的android、app、tools

小總結:

  • xmlns: xml namespace 的縮寫。
  • android:規範使用者的可以使用的屬性範圍
  • app:擴充套件自定義屬性或support支援包之類的,即該控制元件沒有改屬性
  • tools:用於執行時更改佈局屬性。例如,當佈局空間設定執行時更改可見度、更改長寬屬性等。
    轉載自:https://www.jianshu.com/p/910685a8ea91
    在佈局檔案的編寫中,我們經常在跟節點見到這幾句程式碼:

在這裡插入圖片描述
雖然經常見到,但從來沒有好好的認識認識,今天我們就來簡單的聊一下吧~

xmlns:android="http://schemas.android.com/apk/res/android

"

  • 首先我們要明白一點,xmlns是xml namespace的縮寫,意思是xml名稱空間。
  • 那麼我們就好理解這句話是什麼意思了,宣告這個名稱空間引用的是Android系統的,而其中的android作為字首,是這個引用別稱的意思,當然我們也可以將它換成其他的名字
  • 後面schemas的意思是xml檔案的約束(也就是xml的書寫規範,類似於模板),還有一種xml約束是DTD,但schemas相對於DTD來說克服了DTD的侷限性,擴充套件性強。

有了他,Android Studio就會在我們編寫佈局檔案的時候給出提示,提示我們可以輸入什麼,不可以輸入什麼。也可以理解為語法檔案,或者語法判斷器。
xmlns:app="

http://schemas.android.com/apk/res-auto"

  • 在專案需求中,我們往往使用系統自帶的屬性以及控制元件是不夠的,我們可能需要匯入自定義控制元件的一些屬性,或者support支援包之類的。
  • 為了引入自定義的屬性,我們可以xmlns:字首=http://schemas.android.com/apk/res/你的應用程式包路徑,將其匯入。
  • 但現在的普遍做法是使用xmlns:app=“http://schemas.android.com/apk/res-auto”,因為res-auto可以引用所有的自定義包名。

xmlns:tools="http://schemas.android.com/tools

"

  • tools顧名思義是工具的意思,可是我們使用這個名稱空間能帶來什麼效果吶。
  • tools可以告訴Android Studio,哪些屬性在執行的時候是被忽略的,只在設計佈局的時候有效。
  • tools可以覆蓋android的所有標準屬性,將android:換成tools:即可;同時在執行的時候就連tools:本身都是被忽略的,不會被帶進apk中。

舉個栗子:
假如我們要給一個按鈕設定陰影效果,可是專案的minSdkVersion是19,於是我們就會看到下面這種情況:
在這裡插入圖片描述
提示我們elevation屬性是從API 21才開始有的,可是當前的最小API只有19,於是我們可以根據提示:
使用tools:ignore=“UnusedAttribute”,忽略警告:
在這裡插入圖片描述

  • 使用tools:targetApi=“lollipop”,告訴IDE這個是屬性是針對android 5.0及以上的:
    在這裡插入圖片描述
    雖然上面這兩種做法都沒有再報語法錯誤,可是並沒有解決實際問題,打擦邊球並不是最好的解決方法。
  • 所以我們可以使用support的名稱空間,support包可以為低版本的使用者做一些擴充支援:
    在這裡插入圖片描述
    這樣我們就很好的解決所有問題了,既不會報錯,也能夠使高低版本得到相同的顯示效果。