Android之Providing Resources(提供资源)
當你寫程序的時候應該習慣于把一些程序需要用到的資源,例如圖片和字符串,分開并獨立地保存在你的程序代碼之外,這樣你就可以獨立地維護這些資源文件。你還應該通過特殊的名字的文件路徑,為特定的設備配置提供可替換的資源文件。在運行時,Android會基于現在的配置自動應用合適的資源文件。例如,你可以根據不同的屏幕尺寸或基于語言設置的不同的字符串來提供不同的UI布局。
?
?
?
一旦你將資源文件與程序代碼分開保存,你可以通過資源ID號來使用對應的資源文件,這些資源ID在項目的R類中自動生成。關于如何在你的程序里面使用資源,可以看看Accessing Resources。這篇文檔將介紹如何在你的Android工程下來組織管理你的資源文件,以及如何給特定的設備配置提供可替代的資源。
?
?
?
Grouping Resource Types/資源文件的分類
?
在你的工程的res/目錄下,每個子目錄對應一種類型的資源文件。例如,下面是一個簡單工程的文件樹狀結構。
MyProject/
??? src/?
??????? MyActivity.java?
??? res/
??????? drawable/?
??????????? icon.png?
??????? layout/?
??????????? main.xml
??????????? info.xml
??????? values/?
??????????? strings.xml?
這個例子中你可以看到,res/目錄下包含了所有的資源文件(在子目錄下):一個圖片資源,兩個布局資源文件,和一個string資源文件。這個資源目錄的名字是非常重要的,如Table1:
?
表1. 工程res/下面可以支持的資源目錄:
| 目錄 | 資源類型 |
| animator/ | 定義動畫屬性(property animations)的XML文件. |
| anim/ | 定義補間動畫(tween animations)的XML文件. (動畫的屬性也可以保存在這個目錄下,但是animator/目錄是用來保存動畫屬性的并區別開兩個目錄) |
| color/ | 定義了一些colors對應值的XML文件,見Color State List Resource |
| drawable/ | Bitmap文件(.png,.9.png,.jpg,.gif)或者能被編譯為drawable類型的XML文件: ·???????? Bitmap files ·???????? Nine-Patches(re-sizable bitmaps)State lists ·???????? Color drawables ·???????? Shapes ·???????? Animation drawables 見 Drawable Resources |
| layout/ | 定義用戶界面布局的XML文件. 見 Layout Resource. |
| menu/ | 定義程序menus的XML文件,比如Options Menu,Context Menu,或者Sub Menu.見Menu Resource |
| raw/ | 放置任意的文件,必須為原始形式。使用raw InputStream來打開這些資源文件,調用Resources.openRawResource()方法來打開resource ID對應的資源,比如R.raw.filename。 然而,如果你需要訪問原始文件名字和文件目錄結構,你可以考慮將一些資源文件保存在 assets/ 目錄下(而不是res/raw/)。放在assets/下的文件不提供一個資源ID,所以你只能使用 AssetManager來讀取它們。 |
| values/ | 包含一些簡單值的XML文件,比如strings,integers,和顏色。 在其他res/子目錄下定義的XML資源文件定義的是一個單獨的基于XML文件名的資源,在values/目錄下的文件描述了多種資源。例如這個目錄下的某個資源文件,每個<resources>的子節點定義了一個單獨資源。比如,<string>節點創建了一個R.string資源,<color>節點創建了一個R.color資源。 因為每個資源都是使用自己的XML文件定義的,你可以任意命名文件,并在一個文件里面放不同種類的資源。但是,為了清晰可見(for clarity),你也許想要在一個文件里面放置統一的資源類型。例如,下面是這個目錄下創建資源文件的俗稱約定: ·???????? arrays.xml:放置資源數組(typed arrays) ·???????? colors.xml:放置顏色值(color values) ·???????? dimens.xml:放置長度值(dimension values) ·???????? strings.xml:放置字符串值(string values) ·???????? styles.xml:放置樣式(styles) 見 String Resource,Style Resource以及 More Resource Types。 |
| xml/ | 在運行時可以通過調用Resources.getXML()方法來讀取該目錄下的任意XML文件。各種XML配置文件都必須保存在這里,比如searchable configuration |
?
?
注意:你不可以直接將資源文件保存在res/目錄下—這樣做會引起編譯錯誤。
?
要了解更多關于某種特定資源類型的信息,參見:Resource Types文檔
?
你保存在所有子目錄中的資源也就是表 1 中定義的你的默認資源。也就是說,這些資源為您的應用程序定義了默認的設置和內容。然而,不同類型的Android驅動設備需要不同類型的資源。例如,當一個設備有比正常屏幕大的屏,那么你應該提供不同的布局資源來充分利用屏幕剩余的空間?;蛘?#xff0c;如果設備有不同的語言設置,那么應該提供不同的字符串資源來吧文本翻譯到你的用戶界面上。為了給不同的設備配置提供不同的資源,除了您的默認資源你還需要提供可替代資源。
?
?
Providing Alternative Resources/提供可替換的資源
幾乎每個程序都應該給特定的設備配置提供可替換的資源。例如,可以為不同的屏幕尺寸提供可替換的資源,不同的語言提供可替換的字符串。運行時,Android會自動檢查當前設備配置并為你的應用加載合適的資源。
?
?
?
?
要指定一組資源配置的具體方案(To specify configuration-specific alternatives for a set of resources):
- <resources_name>是和默認資源相對應的目錄名稱(如表1定義)。
- <config_qualifier>是指定一個配置相應的名稱,同時放在這個目錄下的資源會在這個配置上使用。你可以附加多個<config_qualifier>。用破折號進行分開(如表 2定義)。
例如,下面是一些默認資源和可替換資源:
res/
??? drawable/??
??????? icon.png
??????? background.png???
??? drawable-hdpi/?
??????? icon.png
??????? background.png?
?
這個hdpi表明在這個目錄下的資源將會在高分辨率(hign-density)的設備上使用。同時每個drawable目錄下的圖片根據特定屏幕密度繪制大小,文件名是相同的。這樣,你使用引用icon.png和backgrou.png的資源ID是相同的,但是android會根據通過比較可替代資源的目錄名稱與設備配置信息來選擇最合適的drawable下的資源。
?
?
Android支持多種配置標識符(qualifiers),你可以給你一個目錄名字增加多個標識符(qualifiers),通過破折號分開。Table 2列出了合法的配置標識符(qualifiers),如果你在一個資源目錄下使用了多個標識符,則按順序來決定優先權,這些配置標識符必須按下表列出來的順序添加到目錄名稱:
?
注意:Android中的一些配置標識符是在1.0版本之后加上的,所以并不是任意版本的Android系統都支持表2列出的配置標識符。新的配置標識符都說明了它們是在哪一版本添加的。為了避免任何可能出現的額問題,您應該始終為您的應用程序所使用的資源設置默認值。要了解更多信息,參見Providing the Best Device Compatibility with Resources部分。
?
?
?
【未完待續】
?
歡迎轉載,轉載請注明出處:http://www.cnblogs.com/CodeGuy/
轉載于:https://www.cnblogs.com/CodeGuy/archive/2011/08/25/2153901.html
總結
以上是生活随笔為你收集整理的Android之Providing Resources(提供资源)的全部內容,希望文章能夠幫你解決所遇到的問題。