Android復習(二)應用資源——>更多類型
更多資源類型
本頁面定義了更多類型的可具體化的資源,包括:
- Bool
- 帶有布爾值的 XML 資源。
- 顏色
- 帶有顏色值(十六進制顏色)的 XML 資源。
- 尺寸
- 帶有尺寸值(包含度量單位)的 XML 資源。
- ID
- 提供應用資源和組件的唯一標識符的 XML 資源。
- 整數
- 帶有整數值的 XML 資源。
- 整數數組
- 提供整數數組的 XML 資源。
- 類型化數組
- 提供
TypedArray(可用于可繪制對象數組)的 XML 資源。
Bool
在 XML 中定義的布爾值。
注意:Bool 是使用 name 屬性中提供的值(而不是 XML 文件的名稱)引用的簡單資源。因此,您可以在一個 XML 文件中將 bool 資源與其他簡單資源合并到一個 <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>
- 元素:
- 示例:
- 保存在
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>
以下應用代碼會檢索布爾值:
java代碼: Resources res = getResources(); boolean screenIsSmall = res.getBoolean(R.bool.screen_small); kotlin代碼: val screenIsSmall: Boolean = resources.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> - 元素:
- 示例:
- 保存在
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>以下應用代碼會檢索顏色資源:
java代碼: Resources res = getResources(); int color = res.getColor(R.color.opaque_red); kotlin代碼: val color: Int = resources.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 單位)。換句話說,它可在不同設備上提供一致的界面元素大小。
sp- 縮放無關像素 - 這和 dp 單位類似,但它也會根據用戶的字體大小偏好設置進行縮放。建議您在指定字體大小時使用此單位,以便字體大小會根據屏幕密度和用戶偏好設置進行調整。
pt- 點 - 1/72 英寸,基于屏幕的物理尺寸,假設屏幕密度為 72dpi。
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>
- 元素:
- 示例:
- 保存在
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>
以下應用代碼會檢索尺寸:
java代碼: Resources res = getResources(); float fontSize = res.getDimension(R.dimen.font_size); kotlin代碼: val fontSize: Float = resources.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 類中創建唯一的整數,供您用作應用資源(例如,界面布局中的 View)的標識符,或創建唯一的整數,供您在應用代碼中使用(例如,作為對話框的 ID 或結果代碼)。
注意:ID 是使用 name 屬性中提供的值(而不是 XML 文件的名稱)引用的簡單資源。因此,您可以在一個 XML 文件中將 ID 資源與其他簡單資源合并到一個 <resources> 元素下。另外請注意,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>
- 元素:
- 示例:
-
保存在
res/values/ids.xml的 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"格式指定 XML 資源的 ID,則表示“name”ID 不存在,應該創建它。)再比如,以下代碼段使用“dialog_exit”ID 作為對話框的唯一標識符:
showDialog(R.id.dialog_exit)
在同一應用中,在創建對話框時會比較“dialog_exit”ID:
java代碼: protected Dialog onCreateDialog(int id) { Dialog dialog; switch(id) { case R.id.dialog_exit: ... break; default: dialog = null; } return dialog; } kotlin代碼: override fun onCreateDialog(id: Int): Dialog? { return when(id) { R.id.dialog_exit -> { ... } else -> { null } } }
整數
在 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>
- 元素:
- 示例:
-
保存在
res/values/integers.xml的 XML 文件:<?xml version="1.0" encoding="utf-8"?> <resources> <integer name="max_speed">75</integer> <integer name="min_speed">5</integer> </resources>以下應用代碼會檢索整數:
整數數組
在 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>
- 元素:
- 示例:
- 保存在
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>
以下應用代碼會檢索整數數組:
java代碼: Resources res = getResources(); int[] bits = res.getIntArray(R.array.bits); kotlin代碼: val bits: IntArray = resources.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>
- 元素:
- 示例:
- 保存在
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>
以下應用代碼會檢索每個數組,然后獲取每個數組中的第一個條目:
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); 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)

浙公網安備 33010602011771號