Android開發小記:名稱空間錯誤導致自定義屬性不生效
阿新 • • 發佈:2019-02-10
前言
好久沒更新博文了,封閉開發一個多月,就問你怕不怕?最近在使用自定義控制元件的時候發現預覽有效果,可是執行起來就不展示,最後才發現自己的佈局中的名稱空間有問題,導致了控制元件屬性不生效。
名稱空間
名稱空間:namespace。在XML檔案中提供避免元素命名衝突的一種方法。
同時,每個名稱空間都是一組特定屬性的集合標誌。
舉個栗子:
Android中常用的名稱空間:android,tools。
自定義控制元件
在自定義的控制元件過程中,有時會自定義屬性方便直接在佈局中使用。
使用自定義控制元件,可以如下:
<tech.michaelx.view.TabIndicator xmlns:tabindicator="http://schemas.android.com/tools"
android:id="@+id/tab_indicator"
android:layout_width="200dp"
android:layout_height="60dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
tabindicator:selected_text_color="#FFFFFF"
tabindicator:unselect_text_color="#333333">
利用xmlns:即xml namespace,聲明瞭一個新的名稱空間:tabindicator=”http://schemas.android.com/tools”。tabindicator被稱作名稱空間字首,用來訪問自定義view的自定義屬性。AS預覽中可以看到相應的效果,可是執行到機器上後,卻發現自定義屬性沒有作用,起初還以為是程式碼邏輯出了問題,後來才發現,命名空間出了問題,正確的名稱空間應該為:
xmlns:tabindicator="http://schemas.android.com/apk/res-auto"
字首可以任意自定義,後面的連結
卻應該注意,這應該是個常量:
"http://schemas.android.com/apk/res-auto"
改對名稱空間之後就皆大歡喜了,本來是根據ide提示生成的名稱空間,結果卻錯了,囧
沒時間寫長篇博文了,做個筆記,萬一能幫到和我一樣的糊塗蛋呢。。。