Android開發指南-框架主題-資源和資產java
資源和資產Resources and Assetsandroid
資源是Android應用程序不可或缺的部分。通常而言,資源是你想包含和引入到應用程序裏面的一些外部元素,好比圖片、音頻、視頻、文本字符串、佈局、主題等。每一個Android應用程序包含一個資源目錄(res/)和資產目錄(assets/),資產不常常被使用,由於它們的應用程序不多。你僅在須要讀取原始字節流時才須要保存數據爲資產。資源和資產目錄均駐留在Android項目樹的頂端,和源代碼目錄(src/)處在同一級上。web
資源和資產從表面上看沒多大區別,不過整體上,在存儲外部內容時資源用得更多。真正的區別在於任何放置在資源目錄裏的內容能夠經過您的應用程序的R類訪問,這是被Android編譯過的。而任何存放在資產目錄裏的內容會保持它的原始文件格式,爲了讀取它,你必須使用AssetManager來以字節流的方式讀取文件。因此保持文件和數據在資源中(res/)中會更方便訪問。網絡
在這篇文章中,你將獲取關於Android應用程序常用的標準資源類型以及如何在代碼中引用方面的信息。資源和國際化(Resources and Internationalization)是第一步,能夠知道Android如何利用項目資源。而後,可用資源類型(Available Resource Types)彙總描述了各類資源類型及其規格引用。app
資源和國際化Resources and Internationalization框架
資源是外部文件(即非源代碼文件),它們被你的代碼使用,而且在編譯時被編譯到你的應用程序中。Android支持不少不一樣類型的資源文件,包括XML、PNG和JPEG文件。XML文件會因爲其所描述的內容不一樣而形式不一樣。該文檔描述了全部支持的文件類型及每種類型的語法或格式。ide
資源從源代碼中被抽取出來,基於效率考慮,XML文件被編譯成二進制、能夠快速加載的形式。字符串,一樣被壓縮爲一種更富效率的存儲形式。因爲這些緣由,在Android平臺中咱們就有了這些不一樣的資源類型。工具
這是一篇純粹的技術性文檔,它和可用資源(Available Resources)一塊兒覆蓋了有關資源的衆多信息。在使用Android時並不須要記住這篇文檔,可是當你須要它時你應該知道來這裏尋找信息。佈局
介紹Introduction字體
這個話題包含了與之相應的術語列表,和一系列在代碼中使用資源的實例。關於Android支持的全部資源類型的完整指南,請查閱可用資源(Available Resources)。
Android資源系統記錄應用程序中全部非代碼資產。你可使用Resources類來訪問應用程序中的資源;通常能夠經過Context.getResources()得到這個Resources實例。
一個應用程序的資源在生成(build)時被編譯器編譯到應用程序的二進制文件中。要使用一個資源,你必須把它放置到源代碼樹中的正確位置,而且生成(build)到你的應用程序中。做爲編譯過程的一部分,每一個資源的標記都會被生成,在你的源代碼中可使用這些標記-這容許編譯器驗證你的應用程序代碼是否和你定義的資源相匹配。
本部分的其他內容以一個在應用程序中如何使用資源的指南的形式組織。
建立資源Creating Resources
Android支持字符串、位圖以及其餘不少種類型的資源。每一種資源的語法、格式以及存放的位置,都會根據其類型的不一樣而不一樣。一般,你建立的資源通常來自於三種文件:XML文件(除位圖和raw以外的任何文件)、位圖文件(圖像)以及Raw文件(除前面之外的其餘東西,如聲音文件,等等)。事實上,XML文件也有兩種不一樣的類型:被原封不動地編譯進包內的文件和被aapt用來產生資源的文件。這裏有一個每種資源類型的列表,包括文件格式、文件描述以及XML文件類型的細節。
你能夠在你的項目中的res/目錄的適當的子目錄中建立和保存資源文件。Android有一個資源編譯器(aapt),它依照資源所在的子目錄及其格式對其進行編譯。這裏有一個每種資源的文件類型的列表,關於每種類型的描述、語法、格式以及其包含文件的格式或語法見資源參考。
表一
目錄Directory
資源類型Resource Types
res/anim/
XML文件,它們被編譯進逐幀動畫(frame by frame animation)或補間動畫(tweened animation)對象
res/drawable/
.png、.9.png、.jpg文件,它們被編譯進如下的Drawable資源子類型中:
要得到這種類型的一個資源,可使用Resource.getDrawable(id)
位圖文件
9-patches(可變尺寸的位圖)
爲了獲取資源類型,使用mContext.getResources().getDrawable(R.drawable.imageId)
注意:放在這裏的圖像資源可能會被aapt工具自動地進行無損壓縮優化。好比,一個真彩色但並不須要256色的PNG可能會被轉換爲一個帶調色板的8位PNG。這使得同等質量的圖片佔用更少的資源。因此咱們得意識到這些放在該目錄下的二進制圖像在生成時可能會發生變化。若是你想讀取一個圖像位流並轉換成一個位圖(bitmap),請把圖像文件放在res/raw/目錄下,這樣能夠避免被自動優化。
res/layout/
被編譯爲屏幕布局(或屏幕的一部分)的XML文件。參見佈局聲明(Declaring Layout)
res/values/
能夠被編譯成不少種類型的資源的XML文件。
注意: 不像其餘的res/文件夾,它能夠保存任意數量的文件,這些文件保存了要建立資源的描述,而不是資源自己。XML元素類型控制這些資源應該放在R類的什麼地方。
儘管這個文件夾裏的文件能夠任意命名,不過下面使一些比較典型的文件(文件命名的慣例是將元素類型包含在該名稱之中):
array.xml定義數據
colors.xml定義color drawable和顏色的字符串值(color string values)。使用Resource.getDrawable()和Resources.getColor()分別得到這些資源。
dimens.xml定義尺寸值(dimension value)。使用Resources.getDimension()得到這些資源。
strings.xml定義字符串(string)值(使用Resources.getString()或者Resources.getText()獲取這些資源。getText()會保留在UI字符串上應用的豐富的文本樣式)。
· styles.xml定義樣式(style)對象。
res/xml/
任意的XML文件,在運行時能夠經過調用Resources.getXML()讀取。
res/raw/
直接複製到設備中的任意文件。它們無需編譯,添加到你的應用程序編譯產生的壓縮文件中。要使用這些資源,能夠調用Resources.openRawResource(),參數是資源的ID,即R.raw.somefilename。
資源被編進最終的APK文件中。Android建立了一個封裝類,叫作R,在代碼中你可使用它來引用這些資源。R包含了根據資源文件的路徑和名稱命名的子類。
全局資源說明Global Resource Notes
一些資源容許你定義顏色值。Android接受的顏色值可使用多種web樣式的形式--如下幾種包含十六進制常數的形式:#RGB、#ARGB、#RRGGBB、#AARRGGBB。
全部顏色值支持設置透明度(alpha channel value),前兩位的十六進制數指定了透明瞭。0在透明度值是全透明。默認值是不透明。
使用資源Using Resources
這一部分描述如何使用你建立的資源。它包含如下主題:
l 代碼中使用資源 - 如何在你的代碼中調用資源進行實例化。
l 從其餘資源中引用資源 - 你能夠從其餘資源中引用資源。這就使得你能夠重用資源中公共資源值。
l 支持針對交替配置的交替資源 - 你能夠根據主機硬件的語言或顯示配置指定加載不一樣的資源。
在編譯時,Android產生一個名爲R的類,它包含了你的程序中全部資源的資源標識符。這個類包含了一些子類,每個子類針對一種Android支持的資源類型,或者你提供的一個資源文件。每個類都包含了已編譯資源的一個或多個資源標識符,你能夠在代碼中使用它們來加載資源。下面是一個小的資源文件,包含了字符串、佈局(屏幕或屏幕的一部分)和圖像資源。
注意: R類是一個自動產生的文件,並無設計爲能夠手動編輯。當資源更新時,它會根據須要從新產生。
package com.google.android.samples;
public final class R {
public static final class string {
public static final int greeting = 0x0204000e;
public static final int start_button_text = 0x02040001;
public static final int submit_button_text = 0x02040008;
public static final main_screen_title = 0x0204000a;
};
public static final class layout {
public static final int start_screen = 0x02070000;
public static final int new_user_pane = 0x02070001;
public static final int select_user_list = 0x02070002;
};
public static final class drawable {
public static final int company_logo = 0x02020005;
public static final int smiling_cat = 0x02020006;
public static final int yellow_fade_background = 0x02020007;
public static final int stretch_button_1 = 0x02020008;
};
};
在代碼中使用資源Using Resources in Code
在代碼中使用資源,只是要知道全部資源ID和你的被編譯的資源是什麼類型。下面是一個引用資源的語法:
R.resource_type.resource_name或者
android.R.resource_type.resource_name其中resource_type是R的子類,保存資源的一個特定類型。resource_name時在XML文件定義的資源的name屬性,或者有其餘文件類型爲資源定義的文件名(不包含擴展名)。每一種資源類型都會根據其類型加爲一個特定的R子類;要了解R的哪個子類是關於你的資源類型的,請參考資源參考(resource reference)文檔。被你的應用程序編譯的資源能夠不加包名引用(就像R.resource_type.resource_name這樣簡單)。Android包含了不少標準資源,如屏幕樣式和按鈕背景。要在代碼中引用這些資源,你必須使用android進行限定,如android.R.drawable.button_background。
這裏有一些在代碼中使用已編譯資源的正確和錯誤用法的例子。
// Load a background for the current screen from a drawable resource.
this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
// WRONG Sending a string resource reference into a
// method that expects a string.
this.getWindow().setTitle(R.string.main_title);
// RIGHT Need to get the title from the Resources wrapper.
this.getWindow().setTitle(Resources.getText(R.string.main_title));
// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);
// Set a slide in animation for a ViewFlipper object.
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in));
// Set the text on a TextView object.
TextView msgTextView = (TextView)findViewByID(R.id.msg);
msgTextView.setText(R.string.hello_message);
引用資源References to Resources
在屬性(或資源)中提供的值也能夠做爲資源的引用。這種狀況常用在佈局文件中,以提供字符串(所以它們能夠被本地化 <將ui上的字符串放在一個單獨的文件中,在作國際化時只須要將它們翻譯成相應的語言版本,而後應用程序根據locale信息加載相應的字符串文件——譯者注> )和圖像(它們存在於另外的文件中),雖然引用能夠是任何資源類型,包括顏色和整數。
例如,若是咱們有顏色資源(color resources),咱們能夠編寫一個佈局文件,將文本的顏色設爲那些資源中包含的值:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="Hello, World!" />
注意,這裏使用「@」前綴引入對一個資源的引用——在@[package:]type/name形式中後面的文本是資源的名稱。在這種狀況下,咱們不須要指定包名,由於咱們引用的是咱們本身包中的資源。要引用系統資源,你應該這樣寫:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="Hello, World!" />
另一個例子,當在佈局文件中提供字符串以便於本地化時,你應該一直使用資源引用。
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="@string/hello_world" />
這種技巧還能夠用來建立資源之間的引用。例如,咱們能夠建立新的drawable資源做爲已存在資源的別名。
引用主題屬性References to Theme Attributes
另一種資源值容許你引用當前主題中的屬性的值。這個屬性值只能在樣式資源和XML屬性中使用;它容許你經過將它們改變爲當前主題提供的標準變化來改變UI元素的外觀,而不是提供具體的值。
如例中所示,咱們在佈局資源中使用這個特性將文本顏色設定爲標準顏色的一種,這些標準的顏色都是定義在基本系統主題中。
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="?android:textDisabledColor"
android:text="@string/hello_world" />
注意,這和資源引用很是相似,除了咱們使用一個「?」前綴代替了「@」。當你使用這個標記時,你就提供了屬性資源的名稱,它將會在主題中被查找——由於資源工具知道須要的屬性資源,因此你不須要顯示聲明這個類型(若是聲明,其形式就是?android:attr/android:textDisabledColor)。
除了使用這個資源的標識符來查詢主題中的值代替原始的資源,其命名語法和「@」形式一致:?[namespace:]type/name,這裏類型可選。
使用系統資源Using System Resources
在系統中的包含了不少應用程序可使用的資源。全部的這些資源都在「android.R」類下定義。例如,使用下面的代碼你能夠在屏幕上顯示標準應用程序的圖標:
public class MyActivity extends Activity {
public void onStart() {
requestScreenFeatures(FEATURE_BADGE_IMAGE);
super.onStart();
setBadgeResource(android.R.drawable.sym_def_app_icon);
}
}
以類似的方式,下面的代碼將對你的屏幕應用系統定義的標準「綠色背景」視覺處理。
public class MyActivity extends Activity
public void onStart() {
super.onStart();
setTheme(android.R.style.Theme_Black);
}
}
替換資源(爲了可替換的資源和配置)Alternate Resources
你能夠根據UI語言或者設備上的硬件配置,爲你的產品提供不一樣的資源。注意,儘管你能夠包含不一樣的字符串、佈局和其餘資源,然而SDK沒有方法供你指定加載哪個替換資源。Android檢測關於硬件和未知的適當配置,而後適當加載。用戶可使用設備上的設置面板選擇替換語言設置。
爲了包含替換資源,須要建立平行的資源文件夾,而文件夾的名字後面要使用限定符表示它要應用的配置(語言、屏幕方向等等)。例如,下面的工程包含了字符串資源,一個用於英語,而另一個用於法語:
MyApp/
res/
values-en/
strings.xml
values-fr/
strings.xml
Android支持幾種類型的限定符,每個都有不一樣的值。把它們鏈接在資源文件夾名稱的後面,使用短橫線隔開。你能夠爲每個文件夾名稱添加多個限定符,可是它們必須按照這裏列出的順序排列。例如,一個包含drawable資源的文件夾,對於一個完整詳細的配置,可能看起來像:
MyApp/
res/
values-en/
drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480x320/
更典型的是,你只需指定一些特定的要定義資源的配置選項。你能夠放棄完整列表中的任何值,但同時要保證剩下的值仍然保持列表中的順序。
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
表2 列舉了合法的限定符目錄名稱,按優先級排序。下表中列舉在上面的限定符比下面的具備更高的優先級,如同Android如何查找最匹配的目錄中所描述的那樣。
表2
限定符Qualifier
值Values
移動國家碼MCC和移動網絡碼MNC
手機設備SIM卡上的移動國家碼和移動網絡碼。好比mcc310-mnc004 (美國,Verizon品牌); mcc208-mnc00 (法國, Orange品牌); mcc234-mnc00 (英國,BT品牌).
若是這個設備使用一個無線鏈接(GSM電話),則MCC來自SIM卡,而MNC來自該設備將要附着的網絡。你有時會僅使用MCC,例如包含特定國家合法資源在您的應用程序中。若是您的應用程序指定了MCC/MNC組合的資源,這些資源僅在MCC和MNC都匹配的時候才能使用。
語言和區域Language and region
兩個字母的ISO 639-1語言碼和ISO 3166-1-alpha-2區域碼 (以"r"爲前綴)。好比en-rUS, fr-rFR, es-rES.
這個代碼是大小寫敏感的:語言碼是小寫字母,國家碼是大寫字母。你不能單獨指定一個區域,可是你能夠單獨指定一個語言,好比en, fr, es, zh.
屏幕方向Screen orientation
縱向,橫向,正方形(port, land, square)
屏幕像素密度Screen pixel density
92dpi, 108dpi等. 當Android選擇使用哪一個資源時,它對屏幕像素密度的處理和其它限定符不一樣。在文章後面描述的步驟1Android如何查找最匹配的目錄中,屏幕密度總被認爲是匹配的。在步驟4中,若是被考慮的限定符是屏幕密度,Android將選擇在那個位置的最佳匹配,而無需繼續步驟5。
觸摸屏類型Touchscreen type
非觸摸式,觸摸筆,手指(notouch, stylus, finger)
鍵盤可用方式Whether the keyboard is available to the user
外在鍵盤,隱藏鍵盤,軟鍵盤(keysexposed, keyshidden, keyssoft)
若是你的應用程序有一個特定的資源只能經過軟件盤使用,則使用keyssoft 值,若是沒有keyssoft 資源可用(只有keysexposed 和 keyshidden)而且該設備顯示了一個軟鍵盤,那麼系統將使用keysexposed 資源。
首選文本輸入方法Primary text input method
不支持按鍵,標準鍵盤,12鍵(nokeys, qwerty, 12key)
首選非觸摸式導航方法Primary non-touchscreen
navigation method
不支持導航,滑板,跟蹤球,滾輪(nonav, dpad, trackball, wheel)
屏幕分辨率Screen dimensions
320x240, 640x480, 等. 更大的分辨率必須先被指定。
SDK版本SDK version
設備支持的SDK版本,好比v3。Android1.0 SDK是v1,1.1SDK是v2,1.5SDK是v3。
小版本(Minor version)
你目前還不能指定小版本,它老是被設置爲0。
這個列表不包含設備特有的參數好比載波,品牌,設備/硬件,或者製造商。全部應用程序須要知道的設備信息均經過上表中的資源限定符編碼。
全部資源目錄,許可的和未經許可的,都存放在res/目錄下。下面是一些關於許可的資源目錄名稱的指導原則:
l 你能夠指定多個限定符,用破折號分開。好比,drawable-en-rUS-land會被應用在美國英語的橫向手機設備中。
l 限定符必須符合表2中列舉的順序。好比:
正確的:values-mcc460-nokeys/
錯誤的:values-nokeys-mcc460/
l 限定符的值大小寫敏感。好比一個縱向特定的drawable目錄必須命名爲drawable-port,不能夠是drawable-PORT或drawable-Port。
l 每一個限定符類型僅支持一個值。好比,若是你想使用爲法國和西班牙使用相同的drawable文件,你得須要兩個資源目錄,如drawable-rES/和drawable-rFR/,包含相同的文件。你不能使用一個名爲drawable-rES-rFR的目錄。
l 限定符不能嵌套使用。好比,你不能使用res/drawable/drawable-en。
資源怎麼在代碼中使用How resources are referenced in code
全部的資源均經過它們簡單未經修飾的名字在代碼或資源引用語法中引用。因此若是一個資源命名以下:
MyApp/res/drawable-port-92dpi/myimage.png
它會被這樣引用:
R.drawable.myimage (code)
@drawable/myimage (XML)
若是有多個drawable目錄可用, Android將會選擇其一(以下所述)並從中加載myimage .png。
Android如何查找最匹配的目錄How Android finds the best matching directory
Android將從各類潛在的資源中挑選出哪一個應該在運行時使用,這取決於設備的當前配置。這裏的例子假定使用了以下的設備配置:
區域Locale = en-GB
屏幕方向Screen orientation = port
屏幕像素密度Screen pixel density = 108dpi
觸摸屏類型Touchscreen type = notouch
首選文本輸入方式Primary text input method = 12key
下面說明了Android如何做出選擇:
1. 排除和設備配置衝突的資源文件。好比,假定以下的drawables資源目錄可用。那麼drawable-fr-rCA/會被排除,由於它和設備的區域配置衝突。
MyApp/res/drawable/
MyApp/res/drawable-en/
MyApp/res/drawable-fr-rCA/
MyApp/res/drawable-en-port/
MyApp/res/drawable-en-notouch-12key/
MyApp/res/drawable-port-92dpi/
例外:屏幕像素密度是惟一不用來排除文件的限定符。即便設備屏幕密度是108dpi,drawable-port-92dpi/也不會被從列表中排除,由於在這裏全部的屏幕密度都被視爲匹配。
2. 從表2中選取最高優先級的限定符(從MCC開始,而後自該列表依次往下)。
3. 有沒有哪一個可用的資源目錄包含了這個限定符?
² 若是沒有,回到步驟2而後查看錶2中所列的下一個限定符。在咱們的例子中,答案是「沒有」直到咱們到達語言這一級。If No, return to step 2 and look at the next qualifier listed in Table 2. In our example, the answer is "no" until we reach Language;
² 若是有,則跳轉到步驟4。
4. 排除不包含這個限定符的資源目錄,在咱們的例子中,咱們排除全部不包含語言的目錄。
MyApp/res/drawable/
MyApp/res/drawable-en/
MyApp/res/drawable-en-port/
MyApp/res/drawable-en-notouch-12key/
MyApp/res/drawable-port-92dpi/
MyApp/res/drawable-port-notouch-12key
例外:若是詢問中的限定符是屏幕像素密度,Android會選擇最接近匹配於設備的選項,並且選擇過程將會完成。通常而言,Android會傾向於縮小一個大圖片而不是放大一個小圖片。
5. 回頭重複步驟2,3,4直到只剩下一個選擇。在本例中,屏幕方向是下一個要比較的限定符,咱們排除沒有指定屏幕方向的資源。如今只剩下一個選擇,那就是它了。當drawables被這個應用程序調用時,Android系統會從下面這個目錄中加載資源:MyApp/res/drawable-en-port/
提示Tip: 限定符的優先權比匹配的數目要重要得多。好比,在上面的步驟4中,列表中最後的選項包含三個限定符和設備匹配(方向,觸摸屏類型,和輸入法),而drawable-en 只有一個參數匹配(語言)。可是,語言擁有更高的優先權,因此drawable-port-notouch-12key 被排除出局。
下面的流程圖總結了Android如何選擇資源目錄來加載的過程:
術語Terminology
資源系統將一系列分散內容集合在一塊兒造成最終的完整的資源功能,去幫助咱們瞭解整個系統。這裏有一些核心概念以及組件的概要說明,你在開發中將可能使用到:
資產Asset:應用程序的獨立的數據塊。這包含全部從java程序編譯成的目標文件,圖像 (例如PNG圖片), XML文件等等。這些文件以一種特定的方式組織在一塊兒,在程序最後打包時,它們被捆綁進一個單獨的ZIP文件裏。
aapt::Android最終文件打包工具。這個工具產生最終程序的ZIP文件。除了將資產元數據文件收集在一塊兒,它也把資源定義解析到最終的二進制數據裏。
資源表Resource Table: aapt工具產生的特殊的文件,描述了全部在程序/包裏的資源。這個文件能夠經過資源類來訪問;它不能直接和應用程序接觸。
資源Resource: 資源表裏一條記錄描述的是單一的命名值。大致上, 資源分紅兩種:元資源和包資源.
資源標識符Resource Identifier: 在資源表裏全部的資源都被惟一的整數標識着。 全部的代碼中(資源描述,XML 文件,Java源代碼)你能夠直接使用符號名代替真實的整數數值。
元資源Primitive Resource: 全部元資源均可以被寫成一個簡單的字串,使用必定的格式能夠描述資源系統裏各類不一樣的基本類型:整數,顏色,字串,其餘資源的引用,等等。像圖片以及XML描述文件這些複雜資源,被以元字串資源儲存,它們的值就是相關最終數據文件的路徑。
包資源Bag Resource: 一種特殊類型的資源,不是簡單的字符串,而是一個容納名字/數值對的任意列表。每一個名字自己就是資源標識,每一個值能夠容納相同類型的字符串格式的數據做爲一個普通資源。包資源支持繼承:一個包裏的數據能從其餘包裏繼承,有選擇地替換或者擴展能產生它本身的內容。
種類Kind: 資源種類是對於不一樣需求的資源標識符而言的。例如,繪製資源類經常實例化繪製類的對象,因此這些包含顏色以及指向圖片或XML文件的字符串路徑數據是原始數據。其它常見資源類型是字符串(本地化字符串),顏色(基本顏色),佈局(一個指向XML文件的字串路徑,它描述的是一個用戶界面)以及風格(一個描述用戶接口屬性的包裝資源)。還有一個標準的「attr」資源類型,它定義了命名包裝數據以及XML屬性的資源標識符。
風格Style: 包含包裝資源類型的名字經常用來描述一系列用戶接口屬性。例如,一個TextView的類可能會有一個描述界面風格的類來定義文本大小,顏色以及對齊方式。在一個界面佈局的XML文件中,可使用「風格」 屬性來肯定總體界面風格,它的值就是風格資源的名字。
風格類Style Class: 這裏將詳述一些屬性資源類。其實數據不會被放在資源表自己,一般在源代碼裏它以常量的形式出現,這也可使你在風格類或者XML的標籤屬性裏方便找到它的值。例如,Android平臺裏定義了一個「視圖」的風格類,它包含全部標準視圖的屬性:畫圖區域,可視區域,背景等。這個視圖被使用時,它就會藉助風格類去從XML文件取得數據並將其載入到實例中。
配置Configuration: 對許多特殊的資源標識符,根據當前的配置,能夠有多種不一樣的值。配置包括地區(語言和國家),屏幕方向,屏幕分辨率,等等。當前的配置用來選擇當資源表載入時哪一個資源值生效。
主題Theme: 一個標準類型的資源能爲一個特殊的上下文提供全局的屬性值。例如,當應用工程師寫一個活動時,他能選擇一個標準的主題去使用,白色的或者黑色的;這個類型能提供不少信息,如屏幕背景圖片/顏色,默認文本顏色,按鈕類型,文本編輯框類型,文本大小,等。當佈置一個資源佈局時,控件(文本顏色,選中後顏色,背景)的大部分設置值取自當前主題;若是須要,佈局中的風格以及屬性也能夠從主題的屬性中得到。
覆蓋層Overlay: 資源表不能定義新類型的資源,可是你能夠在其餘表裏替換資源值。就像配置值,這能夠在裝載時候進行;它能加入新的配置值(例如,改變字串到新的位置),替換現有值(例如,將標準的白色背景替換成"Hello Kitty"的背景圖片),修改資源包(例如修改主題的字體大小。白色主題字體大小爲18pt)。這實際上容許用戶選擇設備不一樣的外表,或者下載新的外表文件。
資源引用Resource Reference
可用資源Available Resources文檔提供了一個各類類型資源的詳細列表,並描述瞭如何在Java代碼中或其餘引用中使用它們。
國際化和本地化Internationalization and Localization
即將完成: 國際化和本地化是很是關鍵的,但如今的SDK尚未徹底準備好。當SDK成熟時, 這個章節會包含Android平臺國際化和本地化的相關信息。在此期間,先從把資源外部化以及練習以好的結構建立和使用資源開始作起是個不錯的主意:)
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/iefreer/archive/2009/09/06/4526004.aspx