此页面定义了您可以外部化的以下类型的资源
- 布尔值
- 携带布尔值的 XML 资源。
- 颜色
- 携带颜色值(十六进制颜色)的 XML 资源。
- 尺寸
- 携带尺寸值(带度量单位)的 XML 资源。
- ID
- 为应用程序资源和组件提供唯一标识符的 XML 资源。
- 整数
- 携带整数值的 XML 资源。
- 整数数组
- 提供整数数组的 XML 资源。
- 类型化数组
- 提供
TypedArray
(可用于可绘制对象数组)的 XML 资源。
布尔值
在 XML 中定义的布尔值。
注意:布尔值是一种简单的资源,使用 name
属性中提供的值进行引用,而不是 XML 文件的名称。因此,您可以将布尔值资源与其他简单资源组合在一个 XML 文件中,在一个 <resources>
元素下。
- 文件位置
res/values/文件名.xml
文件名是任意的。<bool>
元素的name
用作资源 ID。- 资源引用
- 在 Java 中:
R.bool.bool_name
在 XML 中:@[包名:]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>
以下应用程序代码检索布尔值
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(每英寸点数)的屏幕,其中 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/文件名.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
` 类中创建一个唯一的整数,您可以将其用作应用程序资源的标识符,例如 UI 布局中的 `View
`,或用作应用程序代码中唯一整数的标识符,例如对话框的 ID 或结果代码。
注意:ID 是一个简单的资源,使用 `name
` 属性中提供的值进行引用,而不是 XML 文件的名称。因此,您可以将 ID 资源与其他简单资源组合在一个 XML 文件中,在一个 `<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>
- 元素
- 示例
-
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 还不存在,并且它将被创建。另一个示例,以下代码片段使用 `
"dialog_exit"
` ID 作为对话框的唯一标识符Kotlin
showDialog
(R.id.dialog_exit)Java
showDialog
(R.id.dialog_exit);在同一个应用程序中,在创建对话框时会比较 `
"dialog_exit"
` IDKotlin
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/文件名.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/文件名.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);