更多資源類型

本頁面定義可外部化的下列資源類型:

布林值
包含布林值的 XML 資源。
顏色
包含顏色值 (以十六進位值表示) 的 XML 資源,
尺寸
包含尺寸值與測量單位的 XML 資源。
ID
可為應用程式資源和元件提供專屬 ID 的 XML 資源。
整數
包含整數值的 XML 資源。
整數陣列
提供整數陣列的 XML 資源。
型別陣列
提供 TypedArray 的 XML 資源,可用於可繪項目陣列。

布林值

XML 中定義的布林值。

注意:布林值資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併布林值資源與其他簡單資源。

檔案位置:
res/values/filename.xml
您可以使用任意檔案名稱。系統會使用 <bool> 元素的 name 做為資源 ID。
資源參照:
Java:R.bool.bool_name
XML:@[package:]bool/bool_name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<bool>
布林值:truefalse

屬性:

name
「字串」。布林值的名稱。系統會將此名稱當做資源 ID。
例如:
儲存在 res/values-small/bools.xml 中的 XML 檔案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>
    <bool name="adjust_view_bounds">true</bool>
</resources>

以下應用程式程式碼會擷取布林值:

Kotlin

val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)

Java

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

以下版面配置 XML 會使用布林值當做屬性:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

顏色

XML 中定義的顏色值,是以 RGB 值和 Alpha 管道指定顏色。在任何接受十六進位顏色值的位置,皆可使用顏色資源。如果預期 XML 中會有 android:drawable="@color/green" 等可繪製資源時,也可以使用顏色資源。

這個值一律會以井字符號 (#) 字元開頭,後方則是以下列其中一種格式表示 Alpha-Red-Green-Blue 資訊:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

注意:顏色資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併顏色資源與其他簡單資源。

檔案位置:
res/values/colors.xml
您可以使用任意檔案名稱。<color> 元素的 name 會做資源 ID 使用。
資源參照:
Java:R.color.color_name
XML:@[package:]color/color_name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<color>
以十六進製表示的顏色。

屬性:

name
「字串」。顏色的名稱。系統會將此名稱當做資源 ID。
例如:
儲存在 res/values/colors.xml 中的 XML 檔案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

以下應用程式程式碼會擷取顏色資源:

Kotlin

val color: Int = resources.getColor(R.color.opaque_red)

Java

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

以下版面配置 XML 會將顏色套用至屬性:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

尺寸

XML 中定義的尺寸值。前面是以數字指定的尺寸,後接測量單位,例如 10 px、2 in 或 5 sp。Android 支援下列測量單位:

dp
密度獨立像素:以螢幕實際密度為依據的抽象單位。這類單位是相對於 160 dpi (每英寸像素數) 螢幕換算而來。在這種螢幕上,1 dp 約等於 1 px。在高密度螢幕中執行時,用於繪製 1 dp 的像素數量會隨螢幕 dpi 相關因素而增加。

同樣地,如果螢幕密度較低,1 dp 使用的像素數量也會縮減。dp 與像素的比率會因螢幕密度而異,但不一定都是直接按比例換算。使用 dp 單位 (而非 px 單位) 能解決這個問題,可針對不同螢幕密度,適當調整版面配置中的檢視畫面尺寸。這種方式可在不同裝置上保持一致的 UI 元素實際大小。

sp
縮放獨立像素:這與 dp 單位類似,但縮放時還會考量使用者的字型大小偏好設定。建議您在指定字型大小時使用這個單位,系統就會根據螢幕密度和使用者偏好設定進行調整。
pt
點:根據螢幕實際大小以 1/72 英寸計算,並假設使用的是 72 dpi 密度螢幕。
px
像素:與螢幕上的實際像素相對應。我們不建議使用這種單位,因為實際呈現方式可能因裝置而異。不同裝置的每英寸像素數可能不同,螢幕上可用的像素總數也可能較多或較少。
mm
公釐:以螢幕實際大小為根據。
in
英寸:以螢幕實際大小為根據。

注意:尺寸資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併尺寸資源與其他簡單資源。

檔案位置:
res/values/filename.xml
您可以使用任意檔案名稱。<dimen> 元素的 name 會做資源 ID 使用。
資源參照:
Java:R.dimen.dimension_name
XML:@[package:]dimen/dimension_name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<dimen>
以浮點值表示的尺寸,後接 dp、sp、pt、px、mm、in 等測量單位。

屬性:

name
「字串」。尺寸的名稱。系統會將此名稱當做資源 ID。
例如:
儲存在 res/values/dimens.xml 中的 XML 檔案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

以下應用程式程式碼會擷取尺寸:

Kotlin

val fontSize: Float = resources.getDimension(R.dimen.font_size)

Java

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

以下版面配置 XML 會將尺寸套用至屬性:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

ID

XML 中定義的不重複資源 ID。Android 開發人員工具會使用您在 <item> 元素中提供的名稱,在專案的 R.java 類別中建立專屬整數,以便做為應用程式資源的 ID (例如在 UI 版面配置中的 View),或用於應用程式程式碼中的專屬整數 (例如對話方塊的 ID 或結果代碼)。

注意:ID 資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併 ID 資源與其他簡單資源。此外,ID 資源不會參照實際的資源項目:這是可附加至其他資源的專屬 ID,或當做應用程式中的不重複整數。

檔案位置:
res/values/filename.xml
您可以使用任意檔案名稱。
資源參照:
Java:R.id.name
XML:@[package:]id/name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<item>
定義專屬 ID。不採用任何值,只有屬性。

屬性:

type
必須為 "id"
name
「字串」。ID 的專屬名稱。
例如:

XML 檔案儲存在 res/values/ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="button_ok" />
    <item type="id" name="dialog_exit" />
</resources>

以下版面配置程式碼片段會為 Button 小工具使用 "button_ok" ID:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

這裡的 android:id 值不包含 ID 參照中的加號,這是因為 ID 已存在,如上述 ids.xml 範例所定義。如果使用加號,以 android:id="@+id/name" 格式將 ID 指定至 XML 資源,表示 "name" ID 尚未存在,需要建立 ID。

下列程式碼片段是另一個範例,使用 "dialog_exit" ID 做為對話方塊的專屬 ID:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

在相同的應用程式中建立對話方塊時,系統會比較 "dialog_exit" ID:

Kotlin

override fun onCreateDialog(id: Int): Dialog? {
    return when(id) {
        R.id.dialog_exit -> {
            ...
        }
        else -> {
            null
        }
    }
}

Java

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case R.id.dialog_exit:
        ...
        break;
    default:
        dialog = null;
    }
    return dialog;
}

整數

XML 中定義的整數。

注意:整數資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併整數資源與其他簡單資源。

檔案位置:
res/values/filename.xml
您可以使用任意檔案名稱。<integer> 元素的 name 會做資源 ID 使用。
資源參照:
Java:R.integer.integer_name
XML:@[package:]integer/integer_name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<integer>
整數。

屬性:

name
「字串」。整數的名稱。系統會將此名稱當做資源 ID。
例如:

XML 檔案儲存在 res/values/integers.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max_speed">75</integer>
    <integer name="min_speed">5</integer>
</resources>

以下應用程式程式碼會擷取整數:

Kotlin

val maxSpeed: Int = resources.getInteger(R.integer.max_speed)

Java

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

整數陣列

XML 中定義的整數陣列。

注意:整數陣列資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併整數陣列資源與其他簡單資源。

檔案位置:
res/values/filename.xml
您可以使用任意檔案名稱。系統會使用 <integer-array> 元素的 name 做為資源 ID。
編譯資源資料類型:
整數陣列的資源指標。
資源參照:
Java:R.array.integer_array_name
XML:@[package:]array/integer_array_name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<integer-array>
定義整數陣列。包含一或多個子項 <item> 元素。

屬性:

android:name
「字串」。陣列的名稱。系統會把此名稱當做資源 ID,藉此參照陣列。
<item>
整數。此值可以是其他整數資源的參照。必須是 <integer-array> 元素的子項。

沒有任何屬性。

例如:
儲存在 res/values/integers.xml 中的 XML 檔案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>
</resources>

以下應用程式程式碼會擷取整數陣列:

Kotlin

val bits: IntArray = resources.getIntArray(R.array.bits)

Java

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

型別陣列

XML 中定義的 TypedArray。您可以使用這種資源類型,為可繪項目等其他資源建立陣列。陣列中的資源不必屬於同一類型,您可以為混合的資源類型建立陣列,但請瞭解陣列中各資料類型的項目和位置,才能使用 TypedArrayget...() 方法正確取得每個項目。

注意:型別陣列資源是使用 name 屬性提供的值 (而非 XML 檔案名稱) 參照的簡單資源。因此,您可以在一個 XML 檔案中的一個 <resources> 元素下,合併型別陣列資源與其他簡單資源。

檔案位置:
res/values/filename.xml
您可以使用任意檔案名稱。系統會使用 <array> 元素的 name 做為資源 ID。
編譯資源資料類型:
TypedArray 的資源指標。
資源參照:
Java:R.array.array_name
XML:@[package:]array/array_name
語法:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
元素:
<resources>
必要。此為根節點。

沒有任何屬性。

<array>
定義陣列。包含一或多個子項 <item> 元素。

屬性:

android:name
「字串」。陣列的名稱。系統會把此名稱當做資源 ID,藉此參照陣列。
<item>
一般資源。此值可以是資源或簡單資料類型的參照。必須是 <array> 元素的子項。

沒有任何屬性。

例如:
儲存在 res/values/arrays.xml 中的 XML 檔案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

下列應用程式程式碼會擷取每個陣列,然後取得每個陣列中的第一個項目:

Kotlin

val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
val drawable: Drawable = icons.getDrawable(0)

val colors: TypedArray = resources.obtainTypedArray(R.array.colors)
val color: Int = colors.getColor(0,0)

Java

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);