本頁面定義可外部化的下列資源類型:
- 布林值
- 包含布林值的 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>
- 元素:
- 例如:
- 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>
- 元素:
- 例如:
- 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 中定義的尺寸值。前面是以數字指定的尺寸,後接測量單位,例如 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>
- 元素:
- 例如:
- 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。Android 開發人員工具會使用您在 <item>
元素中提供的名稱,在專案的 R.java
類別中建立不重複的整數,您可以使用此整數做為應用程式資源 (如 UI 版面配置 View
) 的 ID,或當做應用程式程式碼中的不重複整數,例如對話方塊或結果程式碼的 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>
- 元素:
- 例如:
-
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>
- 元素:
- 例如:
-
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>
- 元素:
- 例如:
- 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
。您可以使用這種資源類型,為可繪項目等其他資源建立陣列。陣列中的資源不必屬於同一類型,您可以為混合的資源類型建立陣列,但請瞭解陣列中各資料類型的項目和位置,才能使用 TypedArray
的 get...()
方法正確取得每個項目。
注意:型別陣列資源是使用 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>
- 元素:
- 例如:
- 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);