Android 應用資源(一):資源類型

少壯不努力,老大徒傷悲
- 《長歌行》 漢樂府html

導讀

Android應用程序主要由兩部份內容組成:代碼和資源。資源是代碼使用的附加文件和靜態內容,例如位圖,佈局,用戶界面字符串,動畫指令等。 咱們應始終將應用程序資源和代碼分離來,這給咱們帶來了如下幾個好處:java

  • 咱們能夠獨立維護資源和代碼,而且資源文件可重複使用;
  • 便於管理,咱們以將資源和邏輯分別版本管理和升級;
  • 便於適配,在運行時,Android會根據當前資源文件配置使用適當的資源;
  • 文件佔用更小。例如:假設在原來的文本格式的XML文件中,有四個地方使用的都是同一個字符串,那麼在最終編譯出來的二進制格式的XML文件中,字符串資源池只有一份字符串值,而引用它的四個地方只佔用一個整數值。
  • 解析速度更快。因爲在二進制格式的XML文件中,全部的XML元素標籤和屬性等值都是使用整數來描述的,所以,在解析的過程當中,就再也不須要進行字符串解析,這樣就能夠提升解析速度。

外部化應用程序資源後,可使用項目R類中生成的資源ID訪問它們。本文主要介紹如何在Android項目中對資源進行分組,爲特定設備配置提供備用資源或是訪問它們等其餘內容將在後續的文章介紹。android

應用程序資源的分類

Android應用程序資源能夠分爲兩大類,分別是assets和res:數組

  • assets:assets類資源放在工程根目錄的assets子目錄下,它裏面保存的是一些原始的文件,能夠以任何方式來進行組織。這些文件最終會被原裝不動地打包在apk文件中。若是咱們要在程序中訪問這些文件,那麼就須要指定文件名來訪問。例如,假設在assets目錄下有一個名稱爲filename的文件,那麼就可使用如下代碼來訪問它:
AssetManager am= getAssets();  
   InputStream is = assset.open("filename");
複製代碼
  • res: res類資源放在工程根目錄的res子目錄下,它裏面保存的文件大多數都會被編譯,而且都會被賦予資源ID。這樣咱們就能夠在程序中經過ID來訪問res類的資源。
MyProject/
        src/
            MyActivity.java
        res/
            drawable/
                graphic.png
            layout/
                main.xml
                info.xml
            mipmap/
                icon.png
            values/
                strings.xml
複製代碼

咱們須要將每種類型的資源放在項目res/目錄的特定子目錄中,資源目錄名稱很重要,以下表所示:bash

目錄 資源類型
animator/ 定義屬性動畫(property animations.)的 XML文件;
anim/ 定義補間動畫(tween animations)的XML文件。(屬性動畫也能夠保存在此目錄中,但屬性動畫應首選animator/目錄以區分這兩種類型);
color/ 定義顏色狀態列表的XML文件。可參考 顏色狀態列表資源
drawable/ 位圖文件(.png,.9.png,.jpg,.gif)或可編譯成如下可繪製資源子類型的XML文件:Bitmap files、Nine-Patches (re-sizable bitmaps)、State lists、Shapes、Animation drawables等,更多請查看Drawable Resources
mipmap/ 用於存儲啓動圖標(不一樣密度)的可繪製文件(drawable)
layout/ 定義用戶界面佈局的XML文件
menu/ 定義應用程序菜單的XML文件,例如「選項菜單」,「上下文菜單」或「子菜單」;
raw/ 這類資源以任意格式的文件保存在res/raw目錄下。你能夠經過(InputStream)Resources.openRawResource(R.raw.filename)打開raw文件;
可是,若是須要訪問原始文件名和文件層次結構,能夠考慮在assets/目錄中保存一些資源(而不是res/raw/)。文件中assets/沒有給出資源ID,所以您只能經過AssetManager去訪問它們。
values/ 包含簡單值的XML文件,例如字符串,整數和顏色。
除了values/目錄外其餘 res/下的目錄的XML資源文件都是基於XML文件名定義單個資源,而values/下的xml資源文件則是描述多個資源。
對於values/中的xml文件,該 < resources > 元素下的每一個子元素都定義一個資源。例如,< string >元素建立 R.string資源,< color >元素建立R.color 資源。
因爲每一個資源都使用本身的XML元素定義,所以您能夠根據須要爲文件命名,並將不一樣的資源類型放在一個文件中。可是,爲清楚起見,您可能但願將不一樣的資源類型放在不一樣的文件中。例如,如下是您能夠在此目錄中建立的資源的一些文件名約定:
array.xml --- 用於資源數組(類型化數組);
colors.xml --- 用於顏色值;
dimens.xml --- 用於維度值;
strings.xml --- 用於字符串值;
styles.xml --- 用於樣式。
xml/ 在運行時能夠經過Resources.getXML()讀取的任意XML文件。各類XML配置文件必須保存在這裏;
font/ 字體文件與擴展如 .ttf,.otf,或.ttc,其中包括一個< font-family >元素的XML文件;

永遠不要將資源文件直接保存在 res/目錄中 - 它會致使編譯器錯誤ide

上述11種類型(不含assets)的資源文件,除了raw類型資源,以及Bitmap文件的drawable類型資源以外,其它的資源文件均爲文本格式的XML文件,它們在打包的過程當中,會被編譯成二進制格式的XML文件,每個res資源在編譯的打包完成以後,都會被分配一個資源ID,這些資源ID被終會被定義爲Java常量值,保存在一個R.java文件中,與應用程序的其它源文件一塊兒被編譯到程序中,這樣咱們就能夠在程序或者資源文件中經過這些ID常量來訪問指定的資源。佈局

應用資源的概覽

下表是每種類型的簡短摘要,後續會陸續補充項目資源目錄(res/)中提供的特定類型的應用程序資源的用法、格式和語法:字體

資源類型 簡短摘要
動畫資源 定義預約動畫,含屬性、補間、逐幀動畫。屬性動畫保存在res/animator/目錄並從R.anim類中訪問,補間動畫保存在res/anim/目錄並從R.anim類中訪問,幀動畫保存在res/drawable/目錄並從R.drawable類中訪問,更多請查看Animation Resources
顏色狀態列表資源 定義基於View狀態更改的顏色資源,保存在res/color/目錄並從R.color上訪問。更多請查看Color State List Resource
drawable 使用位圖或XML定義各類圖形,保存在res/drawable/目錄並從R.drawable上訪問。更多請查看Drawable Resources
佈局資源 定義應用程序UI的佈局,保存在res/layout目錄並從R.layout上訪問。更多請查看Layout Resource
菜單資源 定義應用程序菜單的內容,保存在res/menu目錄並從R.menu上訪問。更多請查看Menu Resource
字符串資源 定義字符串,字符串數組和複數(包括字符串格式和樣式),保存在res/values目錄並從R.string,R.array以及R.plurals上訪問。更多請查看String Resources
style 定義UI元素的外觀和格式,保存在res/value目錄並從R.style上訪問。更多請查看Style Resource
字體資源 定義字體系列並在XML中包含自定義字體,保存在res/font目錄並從R.font上訪問。更多請查看Font Resources
更多資源類型 將其餘原始值定義爲靜態資源,包括如下內容:
1. Bool : 帶有布爾值的XML資源
2. Color : 帶有顏色值(十六進制顏色)的XML資源
3.Dimension : 帶有維度值(帶有度量單位)的XML資源
4. ID : XML資源,爲應用程序資源和組件提供惟一標識符
5. Integer : 包含整數值的XML資源
6. Integer Array : 提供整數數組的XML資源
7. Typed Array : 提供TypedArray(可用於drawable數組)的XML資源源
更多請查看More resource types

參考:

相關文章
相關標籤/搜索