應該始終把像圖片和字符串這樣的資源作為外部與代碼分離開,以便於能夠獨立的維護它們。還可以通過把資源組織到特殊命名的資源目錄中,給特殊的設備配置提供可選的資源。在運行時,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的專欄