更多資源類型

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

本頁面定義更多可以外部化的資源類型,包括:

Bool
包含布林值的 XML 資源。
顏色
包含顏色值 (十六進位顏色) 的 XML 資源,
維度
包含維度值的 XML 資源 (有測量單位)。
ID
XML 資源,可為應用程式資源和元件提供不重複 ID。
整數
包含整數值的 XML 資源。
整數陣列
提供整數陣列的 XML 資源。
型別陣列
提供 TypedArray 的 XML 資源 (可針對可繪項目的陣列使用)。

Bool

XML 中定義的布林值。

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

檔案位置:
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
「字串」。Bool 值的名稱。系統會將此項目當做資源 ID。
例如:
XML 檔案儲存在 res/values-small/bools.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。
例如:
XML 檔案儲存在 res/values/colors.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 中定義的維度值。使用數字指定的維度,後接測量單位。例如:10px、2in、5sp。Android 支援使用下列測量單位:

dp
密度獨立像素 - 根據螢幕實體密度的抽象單位。這些單位相對於 160 dpi (每英寸像素數) 螢幕,其中 1dp 大約等於 1px。在高密度螢幕中執行時,用於繪製 1dp 的像素數量會隨螢幕 dpi 放大的因素而放大。同樣地,如果螢幕密度較低,1dp 使用的像素數量也會縮減。dp 與像素的比率會根據螢幕密度而有所不同,但不一定都是直接比例。使用 dp 單位 (而非 px 單位) 是一種簡單的解決方式,可讓您針對不同螢幕密度調整版面配置中的檢視畫面尺寸。也就是說,這種方式可讓不同裝置的 UI 元素實際大小保持一致。
sp
縮放獨立像素:這與 dp 單位類似,但也會根據使用者的字型大小偏好設定縮放。建議您在指定字型大小時使用此方式,因此系統會自動針對螢幕密度和使用者偏好設定進行調整。
pt
點 - 假設使用的是 72dpi 密度螢幕,則根據螢幕實際大小,以 1/72 英寸計算。
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。
例如:
XML 檔案儲存在 res/values/dimens.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。使用您在 <item> 元素中提供的名稱,Android 開發人員工具會在專案的 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_ok」ID 以提供按鈕小工具:

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

請注意,android:id 值不包含 ID 參照中的加號,而這是因為 ID 已存在,如上述 ids.xml 範例中所定義。(以格式 android:id="@+id/name" 使用加號指定 ID 至 XML 資源,就表示「名稱」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> 元素的子項。

沒有任何屬性。

例如:
XML 檔案儲存在 res/values/integers.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> 元素的子項。

沒有任何屬性。

例如:
XML 檔案儲存在 res/values/arrays.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);