1. 程式人生 > >Android開發小記:名稱空間錯誤導致自定義屬性不生效

Android開發小記:名稱空間錯誤導致自定義屬性不生效

前言

好久沒更新博文了,封閉開發一個多月,就問你怕不怕?最近在使用自定義控制元件的時候發現預覽有效果,可是執行起來就不展示,最後才發現自己的佈局中的名稱空間有問題,導致了控制元件屬性不生效。

名稱空間

名稱空間: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提示生成的名稱空間,結果卻錯了,囧

沒時間寫長篇博文了,做個筆記,萬一能幫到和我一樣的糊塗蛋呢。。。