• Android Video Tutorials

Android 資源組織與訪問



構建優秀的 Android 應用需要用到很多東西。除了編寫應用程式碼之外,還需要處理各種其他**資源**,例如程式碼使用的靜態內容,比如點陣圖、顏色、佈局定義、使用者介面字串、動畫指令等等。這些資源始終單獨儲存在專案**res/**目錄下的各個子目錄中。

本教程將講解如何組織應用資源、指定備用資源以及在應用中訪問它們。

在 Android Studio 中組織資源

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java  
      res/
         drawable/  
            icon.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 
				 

序號 目錄 & 資源型別
1

anim/

定義屬性動畫的 XML 檔案。它們儲存在 res/anim/ 資料夾中,並透過**R.anim**類訪問。

2

color/

定義顏色狀態列表的 XML 檔案。它們儲存在 res/color/ 中,並透過**R.color**類訪問。

3

drawable/

影像檔案(如 .png、.jpg、.gif)或編譯成點陣圖、狀態列表、形狀、動畫 drawable 的 XML 檔案。它們儲存在 res/drawable/ 中,並透過**R.drawable**類訪問。

4

layout/

定義使用者介面佈局的 XML 檔案。它們儲存在 res/layout/ 中,並透過**R.layout**類訪問。

5

menu/

定義應用選單(如選項選單、上下文選單或子選單)的 XML 檔案。它們儲存在 res/menu/ 中,並透過**R.menu**類訪問。

6

raw/

以原始形式儲存的任意檔案。需要使用資源 ID(即R.raw.filename)呼叫Resources.openRawResource()來開啟此類原始檔案。

7

values/

包含簡單值的 XML 檔案,例如字串、整數和顏色。例如,以下是可以在此目錄中建立的資源的一些檔名約定:

  • arrays.xml 用於資源陣列,並透過**R.array**類訪問。

  • integers.xml 用於資源整數,並透過**R.integer**類訪問。

  • bools.xml 用於資源布林值,並透過**R.bool**類訪問。

  • colors.xml 用於顏色值,並透過**R.color**類訪問。

  • dimens.xml 用於尺寸值,並透過**R.dimen**類訪問。

  • strings.xml 用於字串值,並透過**R.string**類訪問。

  • styles.xml 用於樣式,並透過**R.style**類訪問。

8

xml/

可以在執行時透過呼叫Resources.getXML()讀取的任意 XML 檔案。可以將各種配置檔案儲存在此處,並在執行時使用。

備用資源

應用應提供備用資源以支援特定的裝置配置。例如,應為不同的螢幕解析度包含備用 drawable 資源(即影像),併為不同的語言包含備用字串資源。在執行時,Android 會檢測當前裝置配置並載入適合應用的資源。

要為一組資源指定特定於配置的備用項,請執行以下步驟:

  • 在 res/ 中建立一個新目錄,其名稱格式為<resources_name>-<config_qualifier>。其中resources_name將是上表中提到的任何資源,例如 layout、drawable 等。qualifier將指定將使用這些資源的單個配置。可以檢視官方文件以獲取不同型別資源的限定符完整列表。

  • 將相應的備用資源儲存在此新目錄中。資原始檔必須與預設資原始檔完全同名,如下例所示,但這些檔案將包含特定於備用項的內容。例如,儘管影像檔名相同,但對於高解析度螢幕,其解析度將較高。

以下示例指定了預設螢幕的影像和高解析度螢幕的備用影像。

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 

以下另一個示例指定了預設語言的佈局和阿拉伯語的備用佈局。

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      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 

訪問資源

在應用開發過程中,需要在程式碼或佈局 XML 檔案中訪問定義的資源。以下部分說明如何在兩種情況下訪問資源:

在程式碼中訪問資源

編譯 Android 應用時,會生成一個R類,其中包含 res/目錄中所有可用資源的資源 ID。可以使用 R 類透過子目錄和資源名稱或直接使用資源 ID 來訪問該資源。

示例

要訪問res/drawable/myimage.png並設定 ImageView,將使用以下程式碼:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

此處,程式碼的第一行使用R.id.myimageview獲取在佈局檔案中定義的 ID 為myimageview的 ImageView。程式碼的第二行使用R.drawable.myimage獲取名為myimage的影像,該影像位於/res下的 drawable 子目錄中。

示例

考慮下一個示例,其中res/values/strings.xml具有以下定義:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string  name="hello">Hello, World!</string>
</resources>

現在,可以使用資源 ID 將 ID 為 msg 的 TextView 物件上的文字設定為如下所示:

TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

示例

考慮具有以下定義的佈局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>

此應用程式碼將在 Activity 的 onCreate() 方法中載入此佈局,如下所示:

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

在 XML 中訪問資源

考慮以下包含顏色資源和字串資源的資源 XML res/values/strings.xml檔案:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

現在,可以在以下佈局檔案中使用這些資源來設定文字顏色和文字字串,如下所示:

<?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" />

現在,如果再次回顧前面的章節,我解釋了Hello World!示例,我相信您將對本章中解釋的所有概念有更好的理解。因此,我強烈建議您檢視上一章以獲取工作示例,並檢查如何在最基本的級別上使用了各種資源。

廣告

© . All rights reserved.