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 tệp XML mà bạn có thể áp dụng làm màu, nhưng sẽ thực sự thay đổi màu, tuỳ thuộc vào trạng thái của đối tượng View được áp dụng. Ví dụ như một tiện ích Button có thể tồn tại ở một trong số các trạng thái khác nhau (nhấn, đặt tiêu điểm hoặc không trạng thái nào cả). Và khi sử dụng một danh sách trạng thái màu, bạn có thể cung cấp một màu khác nhau trong mỗi 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 được sử dụng.

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 sẽ đượ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à chỉ đơn giản là 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 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 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 phải 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 phải 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ất định, như được mô tả bằng các thuộc tính của màu đó. Phải 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 tuỳ chọn.

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
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. "đúng" 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); "sai" nếu sử dụng mục này được sử dụng ở trạng thái mặc định, không được nhấn.
android:state_focused
Boolean. "đúng" nếu sử dụng mục này khi đối tượng được lấy tiêu điểm (chẳng hạn như khi một nút được làm nổi bật bằng cách sử dụng bi xoay/d-pad); "sai" nếu mục này được sử dụng ở trạng thái mặc định, không phải tiêu điểm.
android:state_selected
Boolean. "đúng" nếu sử dụng mục này khi đối tượng được chọn (chẳng hạn như khi mở một thẻ); "sai" nếu mục này được sử dụng khi đối tượng không được chọn.
android:state_checkable
Boolean. "đúng" nếu sử dụng mục này khi đối tượng có thể kiểm tra được; "sai" nếu sử dụng mục này khi không thể kiểm tra được đối tượng. (Chỉ hữu ích nếu đối tượng có thể chuyển đổi giữa tiện ích có thể kiểm tra và không thể kiểm tra.)
android:state_checked
Boolean. "đúng" nếu sử dụng mục này khi đối tượng được kiểm tra; "sai" nếu sử dụng mục này khi đối tượng không được kiểm tra.
android:state_enabled
Boolean. "đúng" nếu sử dụng mục này khi đối tượng được bật (có thể nhận sự kiện nhấn/nhấp); "sai" nếu mục này được sử dụng khi đối tượng bị tắt.
android:state_window_focused
Boolean. "đúng" nếu mục này được sử dụng khi cửa sổ ứng dụng có tiêu điểm (ứng dụng ở nền trước), "sai" nếu mục này được sử dụng khi cửa sổ ứng dụng không có tiêu đ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 ý: Hãy nhớ là 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ên, thì mục đó sẽ luôn được áp dụng. Đó là lý do giá trị mặc định của bạn phải luôn là giá trị cuối cùng (như được minh hoạ 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>

Tệp XML bố cục này sẽ áp dụng danh sách màu cho một Chế độ xem:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
xem thêm: