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
- 语法:
-
123456
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<
bool
name=
"bool_name"
>[
true
|
false
]</
bool
>
</resources>
- 元素:
- 示例:
- 保存在
res/values-small/bools.xml
的 XML 文件:12345<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<
bool
name=
"screen_small"
>
true
</
bool
>
<
bool
name=
"adjust_view_bounds"
>
true
</
bool
>
</resources>
以下应用代码会检索布尔值:
12345678910java代码:
Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.
bool
.screen_small);
kotlin代码:
val screenIsSmall: Boolean = resources.getBoolean(R.
bool
.screen_small)
以下布局 XML 会将该布尔值应用到属性:
123456<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
- 语法:
-
1234567
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<color
name=
"color_name"
>hex_color</color>
</resources>
- 元素:
- 示例:
- 保存在
res/values/colors.xml
的 XML 文件:123456<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<color name=
"opaque_red"
>#f00</color>
<color name=
"translucent_red"
>#80ff0000</color>
</resources>
以下应用代码会检索颜色资源:
12345678910java代码:
Resources res = getResources();
int
color = res.getColor(R.color.opaque_red);
kotlin代码:
val color: Int = resources.getColor(R.color.opaque_red)
以下布局 XML 会将该颜色应用到属性:
12345<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
- 语法:
-
123456
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<dimen
name=
"dimension_name"
>dimension</dimen>
</resources>
- 元素:
- 示例:
- 保存在
res/values/dimens.xml
的 XML 文件:1234567<?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>
以下应用代码会检索尺寸:
12345678910java代码:
Resources res = getResources();
float
fontSize = res.getDimension(R.dimen.font_size);
kotlin代码:
val fontSize: Float = resources.getDimension(R.dimen.font_size)
以下布局 XML 会将尺寸应用到属性:
12345<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
- 语法:
-
123456
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<item
type=
"id"
name=
"id_name"
/>
</resources>
- 元素:
- 示例:
-
保存在
res/values/ids.xml
的 XML 文件:12345<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<item type=
"id"
name=
"button_ok"
/>
<item type=
"id"
name=
"dialog_exit"
/>
</resources>
然后,以下布局代码段会将“button_ok”ID 应用到按钮微件:
12<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 作为对话框的唯一标识符:
12showDialog(R.id.dialog_exit)
在同一应用中,在创建对话框时会比较“dialog_exit”ID:
12345678910111213141516171819202122232425262728java代码:
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
- 语法:
-
123456
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<integer
name=
"integer_name"
>integer</integer>
</resources>
- 元素:
- 示例:
-
保存在
res/values/integers.xml
的 XML 文件:123456<?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
- 语法:
-
12345678
<?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 文件:123456789<?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>
以下应用代码会检索整数数组:
12345678910java代码:
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
- 语法:
-
1234567
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<resources>
<array
name=
"integer_array_name"
>
<item>resource</item>
</array>
</resources>
- 元素:
- 示例:
- 保存在
res/values/arrays.xml
的 XML 文件:12345678910111213<?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>
以下应用代码会检索每个数组,然后获取每个数组中的第一个条目:
123456789101112131415161718java代码:
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)
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步