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

Trang này xác định nhiều loại tài nguyên hơn mà bạn có ngoại hoá, bao gồm:

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 (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> sẽ đượ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 phải 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 này sẽ 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 nà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 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 tệp XML (ví dụ: 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-Đỏ-Xanh lục-Xanh lam ở 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> sẽ đượ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 phải 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, như mô tả ở trê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 này sẽ 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);

Tệp XML bố cục nà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"/>

Thứ nguyên

Một giá trị thứ nguyên được xác định trong tệp XML. Thứ nguyên được chỉ định bằng một số theo sau là đơn vị đo lường. Ví dụ: 10 px, 2 inch, 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 đó 1dp gần bằng với 1px. Khi chạy trên màn hình có mật độ điểm ảnh cao hơn, số pixel được dùng để vẽ 1dp 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 1dp sẽ được giảm xuống. Tỷ lệ dp trên pixel sẽ thay đổi theo mật độ 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 đơn giản để làm cho các kích thước của chế độ xem trong bố cục thay đổi theo kích thước phù hợp với nhiều mật độ màn hình khác nhau. Nói cách khác, tính năng này cung cấp tính nhất quán cho kích thước thực của các thành phần trong giao diện người dùng trên 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 tuỳ chọn kích thước phông chữ của người dùng. 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 cho 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à 72dpi.
px
Pixel – Tương ứng với các pixel thực tế trên màn hình. Bạn không nên sử dụng đơn vị đo lường này vì cách thể hiện thực tế trên các thiết bị có thể khác nhau; các thiết bị khác nhau có thể có số pixel trên mỗi inch khác nhau, và có thể có nhiều hơn hoặc ít hơn tổng số pixel có sẵ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 ý: Thứ 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 thứ 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ử <dimen> sẽ đượ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 phải là nút gốc.

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

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

thuộc tính:

name
Chuỗi. Tên cho thứ 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/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 này sẽ truy xuất một thứ nguyên:

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 này áp dụng thứ nguyên 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 định nghĩa 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 (ví dụ: 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 (ví dụ: làm 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, hãy nhớ rằng 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ế; nó chỉ 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 phải 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à "mã nhận dạng".
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>

Sau đó, đoạn mã bố cục này sử dụng mã nhận dạng "button_ok" cho tiện ích Nút:

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

Lưu ý là giá trị android:id 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ư định nghĩa trong ví dụ ids.xml ở trên. (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"—điều đó có nghĩa là mã nhận dạng "tên" không tồn tại và bạn cần tạo mã này.)

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> sẽ đượ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 phải 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 này sẽ 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 (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> sẽ đượ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 phải 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 sẽ được dùng làm mã nhận dạng tài nguyên để tham chiếu trong 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 này sẽ 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ẽ. Lưu ý là 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 các loại tài nguyên hỗn hợp, nhưng bạn phải biết các loại dữ liệu và vị trí nằm trong mảng đó để có thể lấy đúng từng mục bằng phương thức get...() của 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 (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> sẽ đượ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 phải 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 sẽ được dùng làm mã nhận dạng tài nguyên để tham chiếu trong 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 này truy xuất từng mảng và sau đó lấy mục nhập đầu tiên trong mỗi 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);