在許多Android項(xiàng)目中,有很多東西要用來建立一個(gè)良好的Android應(yīng)用程序。除了編碼應(yīng)用各種資源,如:位圖,顏色,布局定義,用戶界面字符串,動畫,靜態(tài)內(nèi)容。在res/目錄下,這些資源一直保持在各自子目錄。
這一小節(jié)將學(xué)習(xí)如何組織應(yīng)用程序資源,指定替代資源,并在應(yīng)用程序訪問它們。
將每種類型的資源在一個(gè)特定項(xiàng)目的 res/目錄的子目錄。例如,這里有一個(gè)簡單的項(xiàng)目文件層次:
MyProject/
src/
MyActivity.java
res/
drawable/
icon.png
layout/
activity_main.xml
info.xml
values/
strings.xml
res/目錄中包含不同的子目錄的不同資源。在這里有一個(gè)圖像資源,兩個(gè)布局資源和一個(gè)字符串資源文件。下表給出了詳細(xì)的項(xiàng)目在 res/目錄里面支持的資源。
| 目錄 | 資源類型 |
|---|---|
| anim/ | 定義屬性的動畫XML文件。它們被保存在res/anim/文件夾,并從R.anim類訪問 |
| color/ | 定義的顏色狀態(tài)列表的XML文件。它們被保存在res/color/ ,并從R.color類訪問 |
| drawable/ | 像被編譯成位圖。.png, .jpg, .gif 或XML文件,狀態(tài)列表,圖形,動畫可繪制的圖像文件。它們被保存在res/drawable/,并可從R.drawable類訪問 |
| layout/ | 定義用戶界面布局的XML文件。它們被保存在res/layout/,并可從R.layout類訪問 |
| menu/ | 定義應(yīng)用程序菜單,如選項(xiàng)菜單,上下文菜單或子菜單的XML文件。它們被保存在res/menu/,并可從R.menu類訪問 |
| raw/ | 任意文件保存在其原始形式。您需要callResources.openRawResource()與所述資源ID,即R.raw.filename來打開這樣的原始文件 |
| values/ |
包含簡單的值,如字符串,整數(shù)和顏色的XML文件。例如,這里有一些文件名約定資源,可以創(chuàng)建在該目錄中:
|
| xml/ | 可以通過調(diào)用Resources.getXML()來讀取在運(yùn)行時(shí)任意的XML文件??梢栽谶@里保存各種配置文件,這些文件可在運(yùn)行時(shí)使用 |
應(yīng)用程序提供替代資源以支持特定的設(shè)備配置。例如,包括替代繪制資源(ie.images),針對不同的語言不同的屏幕分辨率并替代字符串資源。在運(yùn)行時(shí)Android 檢測當(dāng)前設(shè)備的配置,并為應(yīng)用程序加載適當(dāng)?shù)馁Y源。
要指定一組資源的配置具體的替代,請遵循以下步驟:
創(chuàng)建新目錄在res/ 目錄下,命名形式如 <resources_name>-<config_qualifier>。這里resources_name 是在上表中提到的資源,如layout,drawable 等限定符將指定一個(gè)單獨(dú)的配置,要使用這些資源??梢圆榭垂俜轿臋n的完整列表,限定符為不同類型的資源。
在這個(gè)新的目錄中保存相應(yīng)的替代資源。資源文件必須被命名為默認(rèn)的資源文件,如下面的例子所示的完全一樣,但這些文件具有特定內(nèi)容的替代。例如,雖然圖像的文件名是相同的,但對高分辨率屏幕,其分辨率會很高。
下面是一個(gè)例子,它指定一個(gè)默認(rèn)的屏幕和高分辨率屏幕的替代圖像的圖像。
MyProject/
src/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
values/
strings.xml
下面是另一個(gè)例子,指定一種默認(rèn)語言為阿拉伯語并指定替代布局。
MyProject/
src/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
layout-ar/
main.xml
values/
strings.xml
在應(yīng)用程序開發(fā)中,需要訪問定義的資源,無論是在代碼還是在布局XML文件。下面的部分介紹了如何訪問資源在這兩個(gè)場景:
當(dāng)Android應(yīng)用程序被編譯時(shí),會產(chǎn)生一個(gè)R類,其中包含在res/ 目錄中的所有可用資源的資源ID。使用R類直接訪問該子目錄和資源名稱或資源ID。
要訪問 res/drawable/myimage.png,并設(shè)置一個(gè)ImageView 可使用下面的代碼:
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
下面第一行代碼,使用R.id.myimageview id 為myimageview定義布局文件。第二行代碼使用 R.drawable.myimage 得到的圖像名稱myimage ,在 /res子目錄下。
考慮在下一個(gè)例子 res/values/strings.xml 有以下定義:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello, World!</string> </resources>
現(xiàn)在,可以設(shè)置一個(gè)TextView對象msg 文字使用資源ID如下:
TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello);
考慮一個(gè)布局res/layout/activity_main.xml 如以下的定義:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a Button" /> </LinearLayout>
這個(gè)應(yīng)用程序代碼的一個(gè)活動將加載此布局,在onCreate()方法如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); }
考慮下面的XML資源res/values/strings.xml文件,包括顏色資源和一個(gè)字符串資源:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="opaque_red">#f00</color> <string name="hello">Hello!</string> </resources>
現(xiàn)在,可以利用這些資源,在下面的布局文件中設(shè)置文本顏色和文本字符串如下:
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/opaque_red" android:text="@string/hello" />
現(xiàn)在,如果將再次通過前面的章節(jié)了解,例如:Hello World!應(yīng)用,將有助于更好的理解本小節(jié)介紹的概念。了解在前面的小節(jié)中是如何利用各種資源的基本操作。