更多资源类型

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

布尔值
包含布尔值的 XML 资源。
颜色
包含颜色值(十六进制颜色)的 XML 资源。
尺寸
包含尺寸值(带度量单位)的 XML 资源。
ID
提供应用资源和组件的唯一标识符的 XML 资源。
整数
包含整数值的 XML 资源。
整数数组
提供整数数组的 XML 资源。
类型化数组
提供 TypedArray(可用于可绘制对象数组)的 XML 资源。

布尔值

在 XML 中定义的布尔值。

注意:布尔值是一种简单的资源,使用在 name 属性中提供的 value 进行引用,而不是 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。
示例
保存在 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 属性中提供的 value 进行引用,而不是 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
String. 颜色的名称。它用作资源 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 的像素数量会按比例缩小。dps 与像素的比例会随屏幕密度而变化,但并不一定成正比。使用 dp 单位而不是 px 单位是让布局中的视图尺寸针对不同的屏幕密度正确调整大小的一种解决方案。它为不同设备上 UI 元素的实际大小提供了一致性。

sp
与缩放无关的像素 - 这类似于 dp 单位,但它也会根据用户的字体大小偏好进行缩放。建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户的偏好进行调整。
pt
磅:假设 72 dpi 密度屏幕,基于屏幕的物理大小,1/72 英寸。
px
像素:对应于屏幕上的实际像素。我们不建议使用此单位,因为实际表示方式可能因设备而异。不同的设备可能具有不同的每英寸像素数,并且屏幕上可用的总像素数可能更多或更少。
mm
毫米:基于屏幕的物理大小。
in
英寸:基于屏幕的物理大小。

注意:尺寸是一种简单的资源,使用 name 属性中提供的 value 进行引用,而不是 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
String. 尺寸的名称。它用作资源 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 类中创建一个唯一的整数,您可以将其用作应用程序资源的标识符,例如 UI 布局中的 View,或在应用程序代码中使用的唯一整数,例如对话框的 ID 或结果代码。

注意:ID 是一种简单的资源,使用 name 属性中提供的 value 进行引用,而不是 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>
元素
<resources>
必需。 这是根节点。

无属性。

<item>
定义一个唯一的 ID。不接受任何值,只接受属性。

属性

type
必须是 "id"
name
String. 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 小部件的 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 作为对话框的唯一标识符

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 属性中提供的 value 进行引用,而不是 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
String. 整数的名称。它用作资源 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 属性中提供的 value 进行引用,而不是 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
String. 数组的名称。此名称用作引用数组的资源 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。您可以使用它来创建其他资源(例如可绘制资源)的数组。数组不需要是同构的,因此您可以创建混合资源类型的数组,但要注意数组中数据类型的类型和位置,以便您可以使用 TypedArray 类的 get...() 方法正确获取每个项目。

注意:类型化数组是一种简单的资源,使用 name 属性中提供的 value 进行引用,而不是 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
String. 数组的名称。此名称用作引用数组的资源 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);