Tài nguyên danh sách trạng thái màu
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
ColorStateList
là đối tượng bạn có thể xác định trong XML và áp dụng dưới dạng một màu sẽ thay đổi trên thực tế, tuỳ thuộc vào trạng thái của đối tượng View
được áp dụng. Ví dụ: một tiện ích Button
có thể tồn tại ở một trong số các trạng thái: nhấn, làm tâm điểm hoặc không ở trạng thái nào. Khi sử dụng danh sách trạng thái màu, bạn có thể cung cấp màu riêng cho từng trạng thái.
Bạn có thể mô tả danh sách trạng thái trong một tệp XML. Mỗi màu được xác định trong một phần tử <item>
bên trong một phần tử <selector>
. Mỗi <item>
sử dụng nhiều thuộc tính để mô tả trạng thái sử dụng thuộc tính đó.
Trong mỗi lần thay đổi trạng thái, danh sách trạng thái sẽ được chuyển từ trên xuống dưới và mục đầu tiên khớp với trạng thái hiện tại được sử dụng. Lựa chọn này không dựa trên kết quả phù hợp "nhất", mà là dựa trên mục đầu tiên đáp ứng tiêu chí tối thiểu của trạng thái.
Lưu ý: Nếu bạn muốn cung cấp một tài nguyên màu tĩnh, hãy sử dụng một giá trị Màu đơn giản.
- vị trí tệp:
res/color/filename.xml
Tên tệp đượ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
ColorStateList
- mã tham chiếu tài nguyên:
-
Trong Java:
R.color.filename
Trong XML: @[package:]color/filename
- cú pháp:
-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color"
android:lStar="floating_point_value"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
- phần tử:
-
<selector>
- Bắt buộc. Đây là phần tử gốc. Chứa một hoặc nhiều phần tử
<item>
.
Thuộc tính:
xmlns:android
- Chuỗi. Bắt buộc. Xác định không gian tên XML là
"http://schemas.android.com/apk/res/android"
.
<item>
- Xác định màu để sử dụng trong một số trạng thái, như được mô tả bằng các thuộc tính của màu đó. Đây là phần tử con của phần tử
<selector>
.
Thuộc tính:
android:color
- Màu thập lục phân. Bắt buộc. Màu được chỉ định bằng giá trị RGB và kênh alpha không bắt buộc.
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 ở một trong các định dạng sau:
- #RGB
- #ARGB
- #RRGGBB
- #AARRGGBB
android:lStar
- Dấu phẩy động. Không bắt buộc. Thuộc tính này sửa đổi độ chói của màu cơ bản. Nó lấy giá trị dấu phẩy động từ 0 đến 100 hoặc một thuộc tính giao diện phân giải như vậy. Màu tổng thể của mục được tính toán bằng cách chuyển đổi màu cơ bản thành không gian màu thân thiện với khả năng hỗ trợ tiếp cận và đặt L* của màu thành giá trị được chỉ định trên thuộc tính
lStar
.
Ví dụ: android:lStar="50"
android:state_pressed
- Boolean. Giá trị là
"true"
nếu sử dụng mục này khi đối tượng được nhấn, chẳng hạn như khi chạm hoặc nhấp vào một nút. Giá trị là "false"
nếu mục này được dùng ở trạng thái mặc định, không được nhấn.
android:state_focused
- Boolean. Là giá trị
"true"
nếu mục này được dùng khi đối tượng được làm tâm điểm, chẳng hạn như khi một nút được làm nổi bật bằng bi xoay hoặc D-pad. Là giá trị "false"
nếu mục này được dùng ở trạng thái mặc định, không phải trạng thái làm tâm điểm.
android:state_selected
- Boolean. Là giá trị
"true"
nếu mục này được dùng khi đối tượng được chọn, chẳng hạn như khi mở một thẻ. Là giá trị "false"
nếu mục này được sử dụng khi đối tượng không được chọn.
android:state_checkable
- Boolean. Là giá trị
"true"
nếu mục này được dùng khi đối tượng ở trạng thái có thể đánh dấu. Là giá trị "false"
nếu mục này được dùng khi đối tượng ở trạng thái không thể đánh dấu. Chỉ hữu ích nếu đối tượng có thể chuyển đổi giữa tiện ích có thể đánh dấu và không thể đánh dấu.
android:state_checked
- Boolean. Là giá trị
"true"
nếu mục này được dùng khi đối tượng được đánh dấu. Là "false"
nếu mục này được dùng khi đối tượng bị bỏ chọn.
android:state_enabled
- Boolean. Là giá trị
"true"
nếu mục này được dùng khi đối tượng được bật, có thể nhận được các sự kiện nhấp chuột hoặc sự kiện nhấn. Là giá trị "false"
nếu mục này được dùng khi đối tượng bị tắt.
android:state_window_focused
- Boolean. Là giá trị
"true"
nếu mục này được dùng khi cửa sổ ứng dụng có tâm điểm, nghĩa là ứng dụng đang chạy ở nền trước. Là giá trị "false"
nếu mục này được dùng khi cửa sổ ứng dụng không có tâm điểm, chẳng hạn như nếu ngăn thông báo được kéo xuống hoặc hộp thoại xuất hiện.
Lưu ý: Mục đầu tiên trong danh sách trạng thái khớp với trạng thái hiện tại của đối tượng sẽ được áp dụng. Vì vậy, nếu mục đầu tiên trong danh sách không chứa thuộc tính trạng thái nào trước đó, thì mục đó sẽ luôn áp dụng. Vì lý do này, hãy đặt giá trị mặc định gần đây nhất của bạn, như trong ví dụ sau.
- ví dụ:
- Tệp XML được lưu vào
res/color/button_text.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
XML bố cục sau đây sẽ áp dụng danh sách màu cho một View
:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
- xem thêm:
-
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Color state list resource\n\nA [ColorStateList](/reference/android/content/res/ColorStateList)\nis an object you can define in XML and apply as a color that actually changes colors depending on\nthe state of the [View](/reference/android/view/View) object it is\napplied to. For example, a [Button](/reference/android/widget/Button)\nwidget can exist in one of several states: pressed, focused, or neither. Using a color state list,\nyou can provide a different color for each state.\n\nYou describe the state list in an XML file. Each color is defined in an `\u003citem\u003e` element inside a single `\u003cselector\u003e` element. Each `\u003citem\u003e`\nuses various attributes to describe the state in which it is used.\n\nDuring each state change, the state list is traversed top to bottom, and the first item that\nmatches the current state is used. The selection is *isn't* based on the \"best\"\nmatch, but rather the first item that meets the minimum criteria of the state.\n\n**Note:** If you want to provide a static color resource, use a\nsimple [color](/guide/topics/resources/more-resources#Color) value.\n\nfile location:\n: `res/color/`*filename*`.xml` \n\n The filename is used as the resource ID.\n\ncompiled resource datatype:\n: Resource pointer to a [ColorStateList](/reference/android/content/res/ColorStateList)\n\nresource reference:\n:\n In Java: `R.color.`*filename* \n\n In XML: `@[`*package* `:]color/`*filename*\n\nsyntax:\n:\n\n ```xml\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cselector xmlns:android=\"http://schemas.android.com/apk/res/android\" \u003e\n \u003citem\n android:color=\"hex_color\"\n android:lStar=\"floating_point_value\"\n android:state_pressed=[\"true\" | \"false\"]\n android:state_focused=[\"true\" | \"false\"]\n android:state_selected=[\"true\" | \"false\"]\n android:state_checkable=[\"true\" | \"false\"]\n android:state_checked=[\"true\" | \"false\"]\n android:state_enabled=[\"true\" | \"false\"]\n android:state_window_focused=[\"true\" | \"false\"] /\u003e\n \u003c/selector\u003e\n ```\n\nelements:\n:\n\n `\u003cselector\u003e`\n : **Required.** This is the root element. Contains one or more `\u003citem\u003e` elements.\n\n Attributes:\n\n `xmlns:android`\n : *String* . **Required.** Defines the XML namespace, which is\n `\"http://schemas.android.com/apk/res/android\"`.\n\n `\u003citem\u003e`\n : Defines a color to use during certain states, as described by its attributes. It is a\n child of a `\u003cselector\u003e` element.\n\n Attributes:\n\n `android:color`\n : *Hexadeximal color* . **Required** . The color is specified with an\n RGB value and optional alpha channel.\n\n The value always begins with a pound (`#`) character, followed by the\n Alpha-Red-Green-Blue information in one of the following formats:\n\n - #*RGB*\n - #*ARGB*\n - #*RRGGBB*\n - #*AARRGGBB*\n\n `android:lStar`\n : *Floating point* . **Optional** . This attribute modifies the base color's perceptual luminance. It takes either a\n floating-point value between 0 and 100 or a theme attribute that resolves as such. The item's\n overall color is calculated by converting the base color to an accessibility friendly color space\n and setting its L\\* to the value specified on the `lStar` attribute.\n\n Example: `android:lStar=\"50\"`\n\n `android:state_pressed`\n : *Boolean* . `\"true\"` if this item is used when the object is tapped, such as when a button\n is touched or clicked. It's `\"false\"` if this item is used in the default, non-tapped state.\n\n `android:state_focused`\n : *Boolean* . `\"true\"` if this item is used when the object is focused, such as when a button\n is highlighted using the trackball or D-pad. It's `\"false\"` if this item is used in the default,\n non-focused state.\n\n `android:state_selected`\n : *Boolean* . `\"true\"` if this item is used when the object is selected, such as when a\n tab is opened. It's `\"false\"` if this item it used when the object isn't selected.\n\n `android:state_checkable`\n : *Boolean* . `\"true\"` if this item is used when the object is checkable. It's `\"false\"` if this\n item is used when the object isn't checkable. Only useful if the object can\n transition between a checkable and non-checkable widget.\n\n `android:state_checked`\n : *Boolean* . `\"true\"` if this item is used when the object is checked. It's `\"false\"` if it\n is used when the object is deselected.\n\n `android:state_enabled`\n : *Boolean* . `\"true\"` if this item is used when the object is enabled, capable of\n receiving touch or click events. It's `\"false\"` if it is used when the object is disabled.\n\n `android:state_window_focused`\n : *Boolean* . `\"true\"` if this item is used when the application window has focus,\n meaning the\n application is in the foreground. It's `\"false\"` if this item is used when the application\n window doesn't have focus, such as if the notification shade is pulled down or a dialog appears.\n\n **Note:** The first item in the state list that\n matches the current state of the object is applied. So, if the first item in the list contains\n none of the preceding state attributes, then it applies every time. For this reason, place your\n default value last, as shown in the following example.\n\n\nexample:\n : XML file saved at `res/color/button_text.xml`: \n\n ```xml\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cselector xmlns:android=\"http://schemas.android.com/apk/res/android\"\u003e\n \u003citem android:state_pressed=\"true\"\n android:color=\"#ffff0000\"/\u003e \u003c!-- pressed --\u003e\n \u003citem android:state_focused=\"true\"\n android:color=\"#ff0000ff\"/\u003e \u003c!-- focused --\u003e\n \u003citem android:color=\"#ff000000\"/\u003e \u003c!-- default --\u003e\n \u003c/selector\u003e\n ```\n\n\n The following layout XML applies the color list to a `View`:\n\n ```xml\n \u003cButton\n android:layout_width=\"fill_parent\"\n android:layout_height=\"wrap_content\"\n android:text=\"@string/button_text\"\n android:textColor=\"@color/button_text\" /\u003e\n ```\n\nsee also:\n:\n - [Color (simple value)](/guide/topics/resources/more-resources#Color)\n - [ColorStateList](/reference/android/content/res/ColorStateList)\n - [State list drawable](/guide/topics/resources/drawable-resource#StateList)"]]