Tài nguyên danh sách trạng thái màu

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: