Các loại tài nguyên khác

Trang này xác định các loại tài nguyên sau đây mà bạn có thể tách riêng ra:

Bool
Tài nguyên XML chứa giá trị boolean.
Màu
Tài nguyên XML chứa một giá trị màu (màu thập lục phân).
Thứ nguyên
Tài nguyên XML chứa giá trị thứ nguyên (có đơn vị đo lường).
Mã nhận dạng
Tài nguyên XML cung cấp giá trị nhận dạng duy nhất cho các thành phần và tài nguyên của ứng dụng.
Số nguyên
Tài nguyên XML chứa giá trị số nguyên.
Mảng số nguyên
Tài nguyên XML cung cấp một mảng số nguyên.
Mảng đã nhập
Tài nguyên XML cung cấp TypedArray (bạn có thể sử dụng tài nguyên này cho một mảng các đối tượng có thể vẽ).

Bool

Một giá trị boolean được xác định trong XML.

Lưu ý: Bool là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name chứ không phải tên của tệp XML. Do đó, bạn có thể kết hợp tài nguyên bool với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>.

vị trí tệp:
res/values/filename.xml
Bạn có thể tuỳ ý đặt tên tệp. name của phần tử <bool> được dùng làm mã nhận dạng tài nguyên.
mã tham chiếu tài nguyên:
Trong Java: R.bool.bool_name
Trong XML: @[package:]bool/bool_name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<bool>
Giá trị boolean: true hoặc false.

Thuộc tính:

name
Chuỗi. Tên cho giá trị boolean. Tên này sẽ được dùng làm mã nhận dạng tài nguyên.
ví dụ:
Tệp XML được lưu vào 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>

Mã xử lý ứng dụng sau đây truy xuất boolean:

Kotlin

val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)

Java

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

Tệp XML bố cục sau đây sử dụng boolean cho một thuộc tính:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

Màu

Một giá trị màu được xác định trong XML. Màu được chỉ định bằng giá trị RGB và kênh alpha. Bạn có thể sử dụng tài nguyên màu ở bất kỳ nơi nào chấp nhận giá trị màu hệ thập lục phân. Bạn cũng có thể sử dụng tài nguyên màu khi dự kiến chứa một tài nguyên có thể vẽ trong XML, chẳng hạn như android:drawable="@color/green".

Giá trị luôn bắt đầu bằng ký tự dấu thăng (#), theo sau là thông tin Alpha-Red-Green-Blue (Alpha-Đỏ-Xanh lục-Xanh dương) ở một trong các định dạng sau:

  • #RGB
  • #ARGB
  • #RRGGBB
  • #AARRGGBB

Lưu ý: Màu sắc là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name (không phải tên của tệp XML). Do đó, bạn có thể kết hợp tài nguyên màu với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>.

vị trí tệp:
res/values/colors.xml
Bạn có thể tuỳ ý đặt tên tệp. name của phần tử <color> được dùng làm mã nhận dạng tài nguyên.
mã tham chiếu tài nguyên:
Trong Java: R.color.color_name
Trong XML: @[package:]color/color_name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<color>
Màu thể hiện bằng hệ thập lục phân.

Thuộc tính:

name
Chuỗi. Tên cho màu sắc. Tên này sẽ được dùng làm mã nhận dạng tài nguyên.
ví dụ:
Tệp XML được lưu vào 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>

Mã xử lý ứng dụng sau đây truy xuất tài nguyên màu:

Kotlin

val color: Int = resources.getColor(R.color.opaque_red)

Java

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

XML bố cục sau đây áp dụng màu sắc cho một thuộc tính:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

Kích thước

Một giá trị kích thước được xác định trong tệp XML. Kích thước được biểu thị bằng một số theo sau là đơn vị đo lường, chẳng hạn như 10 px, 2 in hoặc 5 sp. Các đơn vị đo lường sau đây được Android hỗ trợ:

dp
Pixel không phụ thuộc vào mật độ: Một đơn vị trừu tượng dựa trên mật độ vật lý của màn hình. Các đơn vị này tương ứng với màn hình 160 dpi (số điểm trên mỗi inch), trong đó 1 dp gần bằng với 1 px. Khi chạy trên màn hình có mật độ điểm ảnh cao hơn, số pixel được dùng để vẽ 1 dp sẽ được tăng tỷ lệ theo hệ số thích hợp với dpi của màn hình.

Tương tự như vậy, khi ở màn hình có mật độ điểm ảnh thấp hơn, số pixel dùng cho 1 dp sẽ được giảm xuống. Tỷ lệ dps trên điểm ảnh thay đổi theo mật độ điểm ảnh trên màn hình, nhưng không nhất thiết phải theo tỷ lệ trực tiếp. Việc sử dụng đơn vị dp (thay vì đơn vị px) là một giải pháp để làm cho các kích thước của chế độ xem trong bố cục thay đổi cho phù hợp với nhiều mật độ điểm ảnh trên màn hình. Giải pháp này mang đến tính nhất quán cho kích thước thực của các phần tử trên giao diện người dùng của nhiều thiết bị.

sp
Pixel không phụ thuộc vào tỷ lệ – Tương tự như đơn vị dp, nhưng pixel được chia tỷ lệ theo lựa chọn ưu tiên của người dùng về kích thước phông chữ. Bạn nên sử dụng đơn vị này khi chỉ định kích thước phông chữ để chúng có thể được điều chỉnh theo cả mật độ màn hình và lựa chọn ưu tiên của người dùng.
pt
Điểm: 1/72 inch dựa trên kích thước vật lý của màn hình, giả sử màn hình có mật độ là 72 dpi.
px
Pixel: tương ứng với số pixel thực tế trên màn hình. Bạn không nên sử dụng đơn vị này vì cách trình bày thực tế có thể khác nhau giữa các thiết bị. Các thiết bị khác nhau có thể có số lượng pixel trên mỗi inch khác nhau và có thể có tổng số pixel nhiều hơn hoặc ít hơn trên màn hình.
mm
Milimét: dựa trên kích thước vật lý của màn hình.
in
Inch: dựa trên kích thước vật lý của màn hình.

Lưu ý: Kích thước là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name (không phải tên của tệp XML). Do đó, bạn có thể kết hợp tài nguyên kích thước với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>.

vị trí tệp:
res/values/filename.xml
Bạn có thể tuỳ ý đặt tên tệp. name của phần tử <dimen> được dùng làm mã nhận dạng tài nguyên.
mã tham chiếu tài nguyên:
Trong Java: R.dimen.dimension_name
Trong XML: @[package:]dimen/dimension_name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<dimen>
Kích thước được biểu thị bằng số có độ chính xác đơn, theo sau là một đơn vị đo lường (dp, sp, pt, px, mm, in).

Thuộc tính:

name
Chuỗi. Tên cho kích thước. Tên này sẽ được dùng làm mã nhận dạng tài nguyên.
ví dụ:
Tệp XML được lưu vào 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>

Mã xử lý ứng dụng sau đây truy xuất một kích thước.

Kotlin

val fontSize: Float = resources.getDimension(R.dimen.font_size)

Java

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

Tệp XML bố cục sau đây áp dụng kích thước cho các thuộc tính:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

Mã nhận dạng

Mã nhận dạng tài nguyên duy nhất được xác định trong tệp XML. Tên mà bạn cung cấp trong phần tử <item>, các công cụ dành cho nhà phát triển Android sẽ tạo một số nguyên duy nhất trong lớp R.java của dự án. Bạn có thể sử dụng số này làm giá trị nhận dạng cho tài nguyên của ứng dụng (chẳng hạn như View trong bố cục của giao diện người dùng), hoặc một số nguyên duy nhất để sử dụng trong mã xử lý ứng dụng (chẳng hạn như mã nhận dạng cho hộp thoại hoặc mã kết quả).

Lưu ý: Mã nhận dạng là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name (không phải tên của tệp XML). Do đó, bạn có thể kết hợp tài nguyên mã nhận dạng với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>. Ngoài ra, tài nguyên mã nhận dạng không tham chiếu đến một mục tài nguyên thực tế: đó là một mã nhận dạng duy nhất mà bạn có thể đính kèm vào các tài nguyên khác hoặc dùng làm số nguyên duy nhất trong ứng dụng.

vị trí tệp:
res/values/filename.xml
Bạn có thể tuỳ ý đặt tên tệp.
mã tham chiếu tài nguyên:
Trong Java: R.id.name
Trong XML: @[package:]id/name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<item>
Xác định một mã nhận dạng duy nhất. Không nhận giá trị mà chỉ nhận các thuộc tính.

Thuộc tính:

type
Phải là "id".
name
Chuỗi. Tên duy nhất cho mã nhận dạng này.
ví dụ:

Tệp XML được lưu vào 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>

Đoạn mã bố cục sau đây sử dụng mã nhận dạng "button_ok" cho tiện ích Button:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

Giá trị android:id ở đây không bao gồm dấu cộng trong tham chiếu mã nhận dạng, vì mã nhận dạng này đã tồn tại, như được xác định trong ví dụ ids.xml trước đó. Khi bạn chỉ định một mã nhận dạng cho tài nguyên XML bằng dấu cộng ở định dạng android:id="@+id/name" thì điều đó có nghĩa là mã nhận dạng "name" chưa tồn tại và mã này đã được tạo.

Một ví dụ khác là đoạn mã sau đây sử dụng mã nhận dạng "dialog_exit" làm giá trị nhận dạng duy nhất cho hộp thoại:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

Trong cùng một ứng dụng, mã nhận dạng "dialog_exit" được so sánh khi tạo một hộp thoại:

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;
}

Số nguyên

Số nguyên được xác định trong XML.

Lưu ý: Số nguyên là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name (không phải tên của tệp XML). Do đó, bạn có thể kết hợp tài nguyên số nguyên với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>.

vị trí tệp:
res/values/filename.xml
Bạn có thể tuỳ ý đặt tên tệp. name của phần tử <integer> được dùng làm mã nhận dạng tài nguyên.
mã tham chiếu tài nguyên:
Trong Java: R.integer.integer_name
Trong XML: @[package:]integer/integer_name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<integer>
Một số nguyên.

Thuộc tính:

name
Chuỗi. Tên cho số nguyên. Tên này sẽ được dùng làm mã nhận dạng tài nguyên.
ví dụ:

Tệp XML được lưu vào 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>

Mã xử lý ứng dụng sau đây truy xuất một số nguyên:

Kotlin

val maxSpeed: Int = resources.getInteger(R.integer.max_speed)

Java

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

Mảng số nguyên

Một mảng số nguyên được xác định trong XML.

Lưu ý: Mảng số nguyên là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name chứ không phải tên của tệp XML. Do đó, bạn có thể kết hợp tài nguyên mảng số nguyên với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>.

vị trí tệp:
res/values/filename.xml
Bạn có thể tuỳ ý đặt tên tệp. name của phần tử <integer-array> được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến một mảng số nguyên.
mã tham chiếu tài nguyên:
Trong Java: R.array.integer_array_name
Trong XML: @[package:]array/integer_array_name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<integer-array>
Xác định một mảng số nguyên. Chứa một hoặc nhiều phần tử con <item>.

Thuộc tính:

android:name
Chuỗi. Tên cho mảng. Tên này được dùng làm mã nhận dạng tài nguyên tham chiếu đến mảng.
<item>
Một số nguyên. Giá trị này có thể là một tham chiếu đến tài nguyên số nguyên khác. Phải là phần tử con của phần tử <integer-array>.

Không có thuộc tính nào.

ví dụ:
Tệp XML được lưu vào 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>

Mã xử lý ứng dụng sau đây truy xuất mảng số nguyên:

Kotlin

val bits: IntArray = resources.getIntArray(R.array.bits)

Java

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

Mảng đã nhập

TypedArray được xác định trong XML. Bạn có thể sử dụng hàm này để tạo một mảng tài nguyên khác, chẳng hạn như đối tượng có thể vẽ. Mảng này không bắt buộc phải đồng nhất, vì vậy bạn có thể tạo một mảng gồm các loại tài nguyên kết hợp, nhưng hãy lưu ý đến loại dữ liệu và vị trí nằm trong mảng đó để có thể lấy đúng từng mục với phương thức get...() của lớp TypedArray.

Lưu ý: Mảng đã nhập là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị đã cung cấp trong thuộc tính name chứ không phải tên của tệp XML. Do đó, bạn có thể kết hợp tài nguyên mảng đã nhập với các tài nguyên đơn giản khác trong một tệp XML, bên dưới một phần tử <resources>.

vị trí tệp:
res/values/filename.xml
Bạn có thể tuỳ ý đặt tên tệp. name của phần tử <array> được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến TypedArray.
mã tham chiếu tài nguyên:
Trong Java: R.array.array_name
Trong XML: @[package:]array/array_name
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
phần tử:
<resources>
Bắt buộc. Đây là nút gốc.

Không có thuộc tính nào.

<array>
Xác định một mảng. Chứa một hoặc nhiều phần tử con <item>.

Thuộc tính:

android:name
Chuỗi. Tên cho mảng. Tên này được dùng làm mã nhận dạng tài nguyên tham chiếu đến mảng.
<item>
Tài nguyên chung. Giá trị này có thể là một tham chiếu đến tài nguyên hoặc một loại dữ liệu đơn giản. Phải là phần tử con của phần tử <array>.

Không có thuộc tính nào.

ví dụ:
Tệp XML được lưu vào 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>

Mã xử lý ứng dụng sau đây truy xuất từng mảng rồi nhận mục nhập đầu tiên trong từng mảng:

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);