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>
واحد أو أكثر.
السمات:
xmlns:android
- سلسلة. يجب ملء هذا الحقل. تحدّد مساحة اسم XML، وهي
"http://schemas.android.com/apk/res/android"
.
<item>
- تحدد لونًا لاستخدامه أثناء حالات معينة، كما هو موضح في سماته. وهو عنصر
فرعي لعنصر
<selector>
.
السمات:
android:color
- اللون السداسي العشري. مَعلمة مطلوبة. يتم تحديد اللون باستخدام قيمة
نموذج أحمر أخضر أزرق وقناة ألفا اختيارية.
تبدأ القيمة دائمًا بحرف جنيه (#
)، متبوعًا بمعلومات Alpha-Red-Green-Blue بأحد التنسيقات التالية:
- #نموذج أحمر أخضر أزرق
- #ARGB
- #RRGGBB
- #AARRGGBB
android:lStar
- نقطة عائمة: اختيارية: تعدِّل هذه السمة السطوع الإدراكي للون الأساسي. يأخذ إما قيمة نقطة عائمة بين 0 و100 أو سمة مظهر يتم حلها على هذا النحو. يتم احتساب اللون
الإجمالي للعنصر من خلال تحويل اللون الأساسي إلى مساحة لونية سهلة الاستخدام
وضبط L* على القيمة المحدّدة في السمة
lStar
.
مثال: android:lStar="50"
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"
إذا تم استخدام هذا العنصر عندما لا يتم التركيز
على نافذة التطبيق، مثلاً عند سحب مركز الإشعارات للأسفل أو ظهور مربّع حوار.
ملاحظة: يتم تطبيق العنصر الأول الذي يطابق الحالة الحالية للكائن في قائمة الحالات. لذلك، إذا كان العنصر الأول في القائمة لا يحتوي
على أي من سمات الحالة السابقة، فسيتم تطبيقه في كل مرة. لهذا السبب، ضع القيمة الافتراضية في النهاية، كما هو موضح في المثال التالي.
- مثلا:
- تم حفظ ملف 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" />
- راجِع أيضًا:
-