مورد قائمة حالة الألوان

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" />
راجِع أيضًا: