Android開發之原始碼分析,你不知道的祕密?

Android專案結構無非是ressrc這兩個資料夾,src主要Java程式碼,res放置資原始檔,Eclipse預設生成的資原始檔包括:drawablelayoutvaluesmenu,關於還可以存放哪個型別的資原始檔呢?開啟SDK路徑下的platforms資料夾,隨便開啟一個平臺,比如:android-23,如下路徑——“E:\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-23\data\res”,找到res資料夾,這裡展示所有該平臺開發需要的資源。

Android開發之原始碼分析,你不知道的祕密

工具/原料

Android開發工具:Android Studio或Eclipse

Android測試工具:虛擬裝置或測試手機

一、分析原始碼res結構之重寫Spinner預設背景

在開啟的res資料夾下,看到了其他在Eclipse建立專案時無法自動生成的animanimatorcolor資料夾,這些資料夾在實際的專案開發中可以手動新增,存放的內容和系統提供的內容型別,哪天TeachCourse不記得res資料夾下 能夠建立哪些資料夾時,不妨開啟原始碼res資料夾看看哈。相當於我們可以在自己專案的res中重寫系統這裡的預設屬性。

Android開發之原始碼分析,你不知道的祕密

如果讓你如何重寫系統的預設屬性,你該怎麼辦呢?比如說,重寫Spinner控制元件的預設樣式和下拉選項樣式。

上面我們講解了Android專案結構,瞭解每個res下屬資料夾的作用,那樣我們修改起來顯得很方便了。上面例子想要修改Spinner樣式,重寫android:background=""屬性可以完成,這裡需要注意的是,新增什麼樣的屬性值合適呢?

如果你不清楚怎麼新增屬性值,新增什麼樣的屬性值合適,可以開啟原始碼下的Spinner控制元件預設屬性android:background=""屬性值新增方式(需要說明的系統所有控制元件樣式定義在Style.xml檔案,元件樣式定義在Themes.xml,控制元件屬性定義在attrs.xml),EditPlus(下載)開啟style.xml檔案,Ctrl+F找到Spinner控制元件,如下圖:

Android開發之原始碼分析,你不知道的祕密

看到選項: @drawable/btn_dropdown 即系統定義的預設Spinner的background屬性,屬性檔案位於drawable/btn_dropdown.xml路徑下,依次開啟,找到該檔案,如下圖:

Android開發之原始碼分析,你不知道的祕密

根據Spinner控制元件狀態選擇不同背景,我們要做的是:複製該檔案到自己專案res/drawable中,修改各狀態的背景樣式(重寫該屬性),和美工商量定製一張自己“夢想”的背景:btn_dropdown_normal.png,最後引用定製的背景即可(這裡使用blue_bg.9.png代替btn_dropdown_pressed.9.png),執行效果如下圖:

Android開發之原始碼分析,你不知道的祕密

二、分析原始碼res結構之重寫Spinner預設字型顏色

在Spinner中未提供android:textColor=""屬性,就好像ListView一樣,提供介面卡指定佈局、內容的方式修改字型顏色,Spinner和ListView不同的是:Spinner有下拉選項佈局和預設佈局兩種方式。

Android開發之原始碼分析,你不知道的祕密

關於Spinner或ListView繫結資料的介面卡使用,可以參考TeachCourse另外一篇文章《使用BaseAdapter需要注意的兩個問題以及解決問題的辦法》,可以使用的介面卡有:BaseAdapterArrayAdapteSpinnerAdapter

三者介面卡之間的區別:ArrayAdapter和SpinnerAdapter繫結資料的方式可以手動定義Spinner下拉列表樣式和預設樣式:

ArrayAdapter,使用setDropDownViewResource(int)方法;

SpinnerAdapter,使用回撥方法getDropDownView(),如上面程式碼。

BaseAdapter,只可以手動定義預設樣式(暫不清楚怎麼設定下拉列表),但BaseAdapter使用方法和SpinnerAdapter一樣,推薦使用SpinnerAdapter。

Android開發之原始碼分析,你不知道的祕密

Android開發之原始碼分析,你不知道的祕密

Android開發之原始碼分析,你不知道的祕密

修改Spinner控制元件顏色、樣式和調整大小都不是啥事,只需要定義simple_spinner_item.xml佈局和simple_spinner_dropdown_item.xml,然後引用自定義的而非系統的樣式,即可實現修改Spinner字型顏色效果,如下圖:

Android開發之原始碼分析,你不知道的祕密

Android開發之原始碼分析,你不知道的祕密

注意事項

Spinner作為一個例子演示如何分析res原始碼自帶樣式的方法,其他控制元件同樣適用

分析res原始碼資料夾,熟悉該資料夾下執行建立的子資料夾或檔案的方法

檔案, 資料夾, 原始碼, 資源, 祕密,
相關問題答案