ทรัพยากรรายการสถานะสี
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
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" />
- ดูเพิ่มเติม
-
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 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)"]]