更多资源类型

本页定义了您可以外部化的以下资源类型

布尔值
包含布尔值的 XML 资源。
颜色
包含颜色值(十六进制颜色)的 XML 资源。
尺寸
包含尺寸值(带度量单位)的 XML 资源。
ID
为应用资源和组件提供唯一标识符的 XML 资源。
整数
包含整数值的 XML 资源。
整数数组
提供整数数组的 XML 资源。
类型化数组
提供 TypedArray(可用于 Drawable 数组)的 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>
元素
<resources>
必需。这是根节点。

无属性。

<bool>
布尔值:truefalse

属性

name
字符串。布尔值的名称。此名称用作资源 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 中需要 Drawable 资源时,例如 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(每英寸点数)屏幕的,在该屏幕上 1 dp 大致等于 1 px。当在高密度屏幕上运行时,用于绘制 1 dp 的像素数量会根据屏幕 dpi 的适当因子进行放大。

同样,当在低密度屏幕上时,用于 1 dp 的像素数量会缩小。dp 与像素的比率随屏幕密度而变化,但并非必然成正比。使用 dp 单位而不是 px 单位是一种解决方案,可以使布局中的视图尺寸针对不同屏幕密度正确调整大小。它为您的界面元素在不同设备上的实际尺寸提供了统一性。

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>
元素
<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 类中创建一个唯一整数,您可以将其用作应用资源的标识符,例如界面布局中的 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 微件

<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 用作对话框的唯一标识符

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。您可以使用它创建其他资源(例如 Drawable)的数组。该数组不要求同质,因此您可以创建混合资源类型的数组,但请注意数组中数据类型的类型和位置,以便您可以使用 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>
元素
<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);