Android應用資源—提供資源(Providing Resources)(一)

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *