本頁面定義更多可以外部化的資源類型,包括:
- 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>
- 元素:
- 例如:
- 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 中定義的維度值。使用數字指定的維度,後接測量單位。例如: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>
- 元素:
- 例如:
- 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>
- 元素:
- 例如:
-
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>
- 元素:
- 例如:
-
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);