ColorStateList
เป็นวัตถุที่คุณสามารถกำหนดใน XML และใช้เป็นสีที่เปลี่ยนสีจริงโดยขึ้นอยู่กับ
สถานะของออบเจ็กต์ View
ด้วย ตัวอย่างเช่น Button
วิดเจ็ตอาจมีอยู่ในได้หลายสถานะ ได้แก่ กด โฟกัส หรือไม่ทั้งคู่ การใช้รายการสถานะสี
คุณสามารถระบุสีที่แตกต่างกันสำหรับแต่ละรัฐได้
คุณอธิบายรายการรัฐในไฟล์ XML แต่ละสีจะกำหนดไว้ในองค์ประกอบ <item>
ภายในองค์ประกอบ <selector>
รายการเดียว แต่ละ<item>
ใช้แอตทริบิวต์ที่หลากหลายเพื่ออธิบายรัฐที่ใช้
ในระหว่างการเปลี่ยนสถานะแต่ละครั้ง รายการรัฐจะข้ามผ่านจากบนลงล่าง และเป็นรายการแรกที่
ตรงกับสถานะปัจจุบันที่ใช้ การเลือกไม่ได้อิงตามรายการที่ "ดีที่สุด"
แต่เป็นรายการแรกที่ตรงกับเกณฑ์ขั้นต่ำของรัฐ
หมายเหตุ: หากต้องการระบุแหล่งข้อมูลสีคงที่ ให้ใช้
สี color ง่ายๆ
- ตำแหน่งที่ตั้งไฟล์:
res/color/filename.xml
-
ชื่อไฟล์จะใช้เป็นรหัสทรัพยากร
- ประเภทข้อมูลทรัพยากรที่คอมไพล์:
- ตัวชี้แหล่งข้อมูลไปยัง
ColorStateList
- การอ้างอิงทรัพยากร:
-
ใน Java:
R.color.filename
ใน XML: @[package:]color/filename
- ไวยากรณ์:
-
<?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>
- องค์ประกอบ:
-
<selector>
- ต้องระบุ นี่คือองค์ประกอบรูท มีองค์ประกอบ
<item>
อย่างน้อย 1 รายการ
แอตทริบิวต์:
xmlns:android
- สตริง ต้องระบุ กำหนดเนมสเปซ XML ซึ่งก็คือ
"http://schemas.android.com/apk/res/android"
<item>
- กำหนดสีที่จะใช้ในบางรัฐตามที่อธิบายไว้ในแอตทริบิวต์ของสี เป็น
ย่อยขององค์ประกอบ
<selector>
แอตทริบิวต์:
android:color
- สีแบบเลขฐานสิบหก ต้องระบุ ระบุสีด้วยแอตทริบิวต์
ค่า RGB และช่องทางอัลฟ่าที่ไม่บังคับ
ค่านี้มักจะขึ้นต้นด้วยอักขระสี่เหลี่ยม (#
) ตามด้วยอักขระ
ข้อมูล Alpha-Red-Green-Blue ในรูปแบบใดรูปแบบหนึ่งต่อไปนี้
- #RGB
- #ARGB
- #RRGGBB
- #AARRGGBB
android:lStar
- จุดทศนิยม ไม่บังคับ แอตทริบิวต์นี้จะแก้ไขความสว่างทางการรับรู้ของสีฐาน โดยใช้ทั้ง
ค่าจุดลอยตัวระหว่าง 0 ถึง 100 หรือแอตทริบิวต์ธีมที่ได้รับการแก้ไข รายการ
สีโดยรวมจะคำนวณโดยการแปลงสีพื้นฐานเป็นพื้นที่สีที่เหมาะกับการช่วยเหลือพิเศษ
และตั้งค่า L* เป็นค่าที่ระบุในแอตทริบิวต์
lStar
ตัวอย่าง: android:lStar="50"
android:state_pressed
- บูลีน
"true"
หากใช้รายการนี้เมื่อมีการแตะวัตถุ เช่น เมื่อมีปุ่ม
ถูกแตะหรือคลิก หากใช้งานรายการนี้ในสถานะเริ่มต้นคือไม่ถูกแตะ และเป็น "false"
android:state_focused
- บูลีน
"true"
หากใช้รายการนี้เมื่อโฟกัสวัตถุ เช่น เมื่อปุ่ม
จะถูกไฮไลต์โดยใช้แทร็กบอลหรือ D-pad หากเลือก "รายการนี้" เป็นค่าเริ่มต้น ระบบจะราคา "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"
หากใช้รายการนี้เมื่อแอปพลิเคชัน
จะไม่มีโฟกัส เช่น หากหน้าต่างแจ้งเตือนถูกดึงลงหรือกล่องโต้ตอบปรากฏขึ้น
หมายเหตุ: รายการแรกในรายการรัฐที่
ตรงกับสถานะปัจจุบันของอ็อบเจกต์ที่จะนำมาใช้ ดังนั้น ถ้ารายการแรกในลิสต์มี
ไม่มีแอตทริบิวต์สถานะก่อนหน้า ดังนั้นจึงมีการใช้ทุกครั้ง ด้วยเหตุนี้ โปรดวาง
ค่าเริ่มต้นสุดท้าย ดังที่แสดงในตัวอย่างต่อไปนี้
- ตัวอย่าง:
- ไฟล์ XML ที่บันทึกไว้ที่
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 เลย์เอาต์ต่อไปนี้จะใช้รายการสีกับ View
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
- ดูเพิ่มเติม
-