Skip to content

Most visited

Recently visited

navigation

存取資源

快速檢視

  • 使用 R.java 中的整數可以參照程式碼中的資源,例如 R.drawable.myimage
  • 使用特殊 XML 語法可以參照資源中的資源,例如 @drawable/myimage
  • 您也可以使用 Resources 中的方法存取應用程式資源

重要類別

  1. Resources

本文件內容

  1. 存取程式碼中的資源
  2. 存取 XML 中的資源
    1. 參照樣式屬性
  3. 存取平台資源

另請參閱

  1. 提供資源
  2. 資源類型

提供應用程式中的資源 (於提供資源中討論) 後,您可以參照其資源 ID 加以應用。所有資源 ID 會在專案的 R 類別中定義。此類別是由 aapt 工具自動產生的。

編譯應用程式後,aapt 會產生 R 類別。此類別內含 res/ 目錄中所有資源的資源 ID。 每一種資源類型都有 R 子類別 (例如,所有可繪項目資源的 R.drawable),而這種類型的每一種資源都有靜態整數 (例如,R.drawable.icon)。 此整數就是資源 ID,您可以用於擷取資源。

儘管資源 ID 都指定於 R 類別,您不需要為了取得資源 ID 而加以查看。資源 ID 的組成如下:

您有兩種方式可存取資源:

在程式碼中存取資源

您可以將資源 ID 作為方法參數傳遞,在程式碼中使用資源。例如,您可以利用 setImageResource()ImageView 設定為使用 res/drawable/myimage.png 資源:

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

您也可以使用 Resources (以 getResources() 可取得執行個體) 中的方法擷取個別的資源。

語法

在程式碼中參照資源的語法如下:

[<package_name>.]R.<resource_type>.<resource_name>

請參閱資源類型,以取得關於每個資源類型及其參照方式的詳細資訊。

使用案例

很多方法都接受資源 ID 參數,您可以使用 Resources 中的方法擷取資源。您可以透過以下方式取得 Resources 的執行個體:Context.getResources()

以下是在程式碼中存取資源的範例:

// Load a background for the current screen from a drawable resource
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

注意:您不應手動修改 R.java 檔案 — 此檔案是在編譯專案時由 aapt 工具所產生。 下次編譯時會覆寫所有變更內容。

存取 XML 中的資源

您可以使用現有資源的參照,為某些 XML 屬性和元素定義值。 您在建立版面配置檔案時,會經常以此方式提供字串和影像讓小工具使用。

例如,如果您要將 Button 加入版面配置,應該使用按鈕文字的字串資源

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

語法

在 XML 資源中參照資源的語法如下:

@[<package_name>:]<resource_type>/<resource_name>

請參閱資源類型,以取得關於每個資源類型及其參照方式的詳細資訊。

使用案例

有時候您必須在 XML 中使用資源,而不能使用值 (例如,將可繪項目影像套用至小工具)。不過,您也可以在 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" />

在此情況下,您不用在資源參照中指定封裝名稱,因為資源是來自您自己的封裝。 如要參照系統資源,則需要使用封裝名稱。 範例:

<?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="@android:color/secondary_text_dark"
    android:text="@string/hello" />

注意:您一律都要使用字串資源,便於應用程式當地語系化。 如需關於建立替代資源 (例如當地語系化的字串) 的詳細資訊,請參閱提供替代資源。 如需將應用程式當地語系化的詳細指南,請參閱當地語系化

您甚至可以在 XML 中使用資源以建立別名。例如:您可以用其他可繪項目資源的別名,建立可繪項目資源:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />

聽起來多此一舉,但是,當您使用替代資源時,就非常實用。深入瞭解建立別名資源

參照樣式屬性

樣式屬性資源可以讓您在目前套用的設計風格中參照屬性的值。 參照樣式屬性可以讓您透過目前設計風格提供的標準變化自訂 UI 元素外觀,而不需要使用硬式編碼值。 參照樣式屬性基本上就是「使用目前設計風格中此屬性所定義的樣式」。

如要參照樣式屬性,名稱語法幾乎和一般資源格式相同,只要把小老鼠符號 (@) 換成問號 (?) 即可,而且您可以選擇是否要使用資源類型。 範例:

?[<package_name>:][<resource_type>/]<resource_name>

例如,您可以參照屬性,讓文字色彩符合系統設計風格的「主要」文字色彩,方式如下:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

這裡的 android:textColor 屬性指出目前設計風格中樣式屬性的名稱。 Android 現在會將套用至 android:textColorSecondary 樣式屬性的值,當成此小工具中 android:textColor 的值。 因為系統資源工具知道在此環境中會有一個屬性資源,您不需要明確陳述其類型 ( ?android:attr/textColorSecondary)— 可以不需要寫上出 attr 類型。

存取平台資源

Android 內含多種標準資源,例如樣式、設計風格以及版面配置。如要存取這些資源,則必須在參照資源時使用 android 封裝名稱。 例如,Android 在 ListAdapter 中提供版面配置資源,您可以用於列出項目:

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

在此範例中,simple_list_item_1 是一個版面配置資源,由平台為 ListView 中的項目所定義。 您可以加以使用,而不用自行建立清單項目的版面配置。 如需詳細資訊,請參閱清單檢視開發人員指南。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)