應該始終把像圖片和字串這樣的資源作為外部與代碼分離開,以便於能夠獨立的維護它們。還可以通過把資源群組織到特殊命名的資來源目錄中,給特殊的裝置配置提供可選的資源。在運行時,Android系統會基於當前的配置選擇使用合適的資源。如,可以根據不同的螢幕尺寸提供不同UI布局,也可以根據系統的語言設定提供不同語言的字串。
把應用程式資源作為外部資源分離後,可以使用項目中自動產生的R類中的資源ID來訪問對應的資源。如何使用應用程式中的資源會在“訪問資源”一節中詳細討論,本文檔主要討論如何把資源群組織到應用程式中,並且給特殊的裝置配置提供可選的資源。
按資源類型分組
應該把每種類型的資源分別放到工程的res/目錄的特定子目錄中。例如,以下是一個簡單的工程的檔案組織圖:
MyProject/
src/
MyActivity.java
res/
drawable/
icon.png
layout/
main.xml
info.xml
values/
strings.xml
上例中res/目錄包含了所有的資源(在其子目錄中):一個圖片資源、兩個布局資源、以及一個字串資源檔。資來源目錄的名稱是中重要的,下表1中分別進行說明:
| 目錄 |
資源類型 |
| animator/ |
存放定義屬性動畫的XML檔案 |
| anim/ |
存放定義補建動畫的XML檔案(屬性動畫的XML檔案也可以儲存在這個目錄中,但是animator/目錄是給屬性動畫專用的,以區分這兩種不同的動畫類型。) |
| color/ |
存放定義顏色值的XML檔案 |
| drawable/ |
存放位元影像檔案(.png、.jpg、.gif、.9.png),或者是被編譯成以下可描畫資源類型的XML檔案: 1.位元影像檔案 2.可變尺寸位元影像(Nine-Patches) 3.狀態圖片(states list) 4.形狀 5.動畫繪製 6.其他可繪製資源 |
| layout/ |
存放定義使用者介面布局的XML檔案 |
| menu/ |
存放定義應用程式菜單的XML檔案,如選項菜單、操作功能表、或子功能表 |
| raw/ |
存放任意原生格式的檔案。調用Resources.openRawResource()方法來開啟這些資源。 但是,如果需要訪問原始的檔案名稱和目錄,就要考慮把它們儲存到assets/目錄中(而不是res/raw/目錄)。assets/目錄中的檔案沒有資源ID,因此只能使用AssetManager來讀取它們。 |
| values/ |
存放包含簡單值的XML檔案,如字串、整數以及顏色等。 在其他的res/子目錄中的XML資源檔都是基於XML檔案名稱來定義一種資源,而在values/目錄中的檔案則可以定義多種資源。這個目錄中每個檔案中,每個<resources>元素的子項目都定義了一種資源。如,<string>元素就會建立R.string資源、<color>元素就會建立R.color資源。 因為每種資源都用它們自己的XML元素來定義,所以沒有檔案名稱的限制,並且可以在一個檔案中放入不同的資源類型。但是,為了清晰,可能想要在一個檔案中只放一種資源類型,以下是要在這個目錄中建立的資源檔名的慣例: arrays.xml:針對資源數組(數群組類型) colors.xml:針對顏色值 dimens.xml:尺寸值 strings.xml:字串值 styles.xml:樣式 |
| xml/ |
放在這個目錄下的任意XML檔案,都可以在運行時通過調用Resources.getXML()方法來讀取。各種XML設定檔必須儲存在這兒,如可搜尋配置等。 |
警告:不要把資源檔直接儲存在res/目錄中,這樣會導致編譯錯誤。
儲存在表1中定義的子目錄中資源是預設資源。也就是說,這些資源定義了應用程式的預設設計和內容。但是,不同類型的Android裝置可以調用不同類型的資源。例如,如果一個裝置的螢幕比普通的要大,那麼就應該提供不同的布局資源,以滿足額外的螢幕空間的需要。或者,如果裝置有不同語言設定,那麼就應該提供不同的字串資源,以便在使用者介面上顯示與裝置語言相匹配的文字。要給不同的裝置配置提供這些不同的資源,除了預設的資源以外,還要提供可選的替代資源。
摘自 FireOfStar的專欄