الموارد القابلة للرسم

المورد القابل للرسم هو مفهوم عام لرسم يمكن جذبه إلى الشاشة ويمكنك استرداده باستخدام واجهات برمجة تطبيقات مثل getDrawable(int) أو تطبيقه على مورد XML آخر بسمات مثل android:drawable وandroid:icon. هناك عدة أنواع من الرسومات القابلة للرسم:

ملف الصور النقطية
ملف صورة نقطية (PNG أو WEBP أو JPG أو GIF) تنشئ BitmapDrawable.
ملف من تسعة رقعات
ملف PNG يتضمن مناطق قابلة للتوسيع للسماح بتغيير حجم الصور استنادًا إلى المحتوى (.9.png)، ويؤدي إلى إنشاء NinePatchDrawable.
قائمة الطبقات
عنصر قابل للرسم يدير مجموعة من العناصر الأخرى القابلة للرسم. يتم رسمها بترتيب صفيف، وبالتالي يتم رسم العنصر الذي يحتوي على أكبر فهرس في الأعلى. تنشئ LayerDrawable.
قائمة الولايات
ملف XML يشير إلى رسومات نقطية مختلفة لحالات مختلفة، مثل استخدام صورة مختلفة عند النقر على زر تنشئ StateListDrawable.
قائمة المستويات
ملف XML يحدّد قابلة للرسم ويدير عددًا من العناصر البديلة القابلة للرسم، ويحدّد كل منها قيمة رقمية قصوى تنشئ LevelListDrawable.
إمكانية الانتقال القابلة للرسم
ملف XML يحدّد ملفًا قابلاً للرسم ويمكن أن يتلاشى بين موردين قابلين للرسم. تنشئ TransitionDrawable.
إدراج قابل للرسم
ملف XML يحدّد قابلة للرسم ويدرج فيها قابلة للرسم بمسافة محدّدة ويكون هذا الإجراء مفيدًا عندما تحتاج المشاهدة إلى خلفية قابلة للرسم على مسافة أصغر من الحدود الفعلية للعرض.
قابل للرسم في المقطع
ملف XML يحدّد عنصرًا قابلاً للرسم ويشبه قيمة أخرى قابلة للرسم استنادًا إلى قيمة المستوى الحالي لهذا الرسم القابل للرسم تنشئ ClipDrawable.
قابل للرسم بمقياس
ملف XML يحدّد ملفًا قابلاً للرسم ويغيّر حجم مادة عرض أخرى قابلة للرسم استنادًا إلى قيمة المستوى الحالي ينشئ ScaleDrawable
شكل قابل للرسم.
ملف XML يحدّد شكلاً هندسيًا، بما في ذلك الألوان والتدرجات اللونية تنشئ GradientDrawable.

للحصول على معلومات حول كيفية إنشاء AnimationDrawable، يمكنك الاطّلاع على مستند موارد الصور المتحركة.

ملاحظة: يمكن أيضًا استخدام مورد اللون كجدول قابل للرسم في XML. على سبيل المثال، عند إنشاء رسم قائمة الحالات، يمكنك الرجوع إلى مورد لون للسمة android:drawable (android:drawable="@color/green").

صورة نقطية

صورة نقطية يتيح Android استخدام ملفات الصور النقطية بالتنسيقات التالية: PNG (مفضّلة) وWEBP (مفضّلة، وتتطلب مستوى واجهة برمجة التطبيقات 17 أو أعلى) وJPG (مقبولة) وGIF (غير يُنصح بها).

يمكنك الإشارة إلى ملف صورة نقطية مباشرةً، باستخدام اسم الملف كمعرّف المورد، أو إنشاء معرّف مورد بديل في XML.

ملاحظة: قد يتم تحسين ملفات الصور النقطية تلقائيًا باستخدام ضغط الصور بدون فقدان البيانات باستخدام أداة aapt أثناء عملية الإنشاء. على سبيل المثال، يمكن تحويل ملف PNG بألوان حقيقية لا يتطلب أكثر من 256 لونًا إلى تنسيق PNG 8 بت مع لوحة ألوان. ينتج عن ذلك صورة ذات جودة متساوية تتطلب ذاكرة أقل.

لذلك، يُرجى العِلم أنّ البرامج الثنائية للصور الموضوعة في هذا الدليل قد تتغير أثناء عملية الإنشاء. وإذا كنت تنوي قراءة صورة كتدفق بت لتحويلها إلى صورة نقطية، ضَع صورك في المجلد res/raw/ بدلاً من ذلك، حيث لا تكون محسّنة.

ملف الصور النقطية

ملف الصورة النقطية هو ملف PNG أو WEBP أو JPG أو GIF. ينشئ نظام Android مورد Drawable لأي من هذه الملفات عند حفظها في دليل res/drawable/.

موقع الملف:
res/drawable/filename.png (.png أو .webp أو .jpg أو .gif)
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على BitmapDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
مثلا:
عند حفظ الصورة في res/drawable/myimage.png، يطبّق ملف XML هذا للتنسيق الصورة على طريقة عرض:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

يسترد رمز التطبيق التالي الصورة بصفتها Drawable:

Kotlin

val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)

Java

Resources res = getResources();
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null);
راجِع أيضًا:

صورة نقطية بتنسيق XML

الصورة النقطية بتنسيق XML هي مورد يتم تعريفه في XML يشير إلى ملف صورة نقطية. ويكون التأثير اسمًا مستعارًا لملف صورة نقطية أوّلية. يمكن لملف XML تحديد خصائص إضافية للصورة النقطية، مثل التجانب والتقسيم إلى أجزاء.

ملاحظة: يمكنك استخدام عنصر <bitmap> كعنصر ثانوي للعنصر <item>. على سبيل المثال، عند إنشاء قائمة الحالات أو قائمة الطبقات، يمكنك استبعاد السمة android:drawable من عنصر <item> ودمج <bitmap> داخله لتحديد العنصر القابل للرسم.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على BitmapDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
العناصر:
<bitmap>
يجب ملء هذا الحقل. لتحديد مصدر الصورة النقطية وخصائصها.

السمات:

xmlns:android
سلسلة: تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android". يكون هذا الإجراء مطلوبًا فقط إذا كان <bitmap> هو العنصر الجذر. ولا يلزم استخدامها عندما يتم دمج <bitmap> في <item>.
android:src
مورد قابل للرسم. مَعلمة مطلوبة. الإشارة إلى مورد قابل للرسم.
android:antialias
منطقية تُفعِّل الواجهة أو توقفها.
android:dither
منطقية تعمل هذه السياسة على تفعيل أو إيقاف تباين الصورة النقطية إذا لم تكن الصورة النقطية لها إعدادات البكسل نفسها المستخدمة على الشاشة، مثل الصورة النقطية 8888 ARGB على شاشة نموذج أحمر أخضر أزرق 565.
android:filter
منطقية لتفعيل فلترة الصور النقطية أو إيقافها يتم استخدام التصفية عند تقليص الصورة النقطية أو تمديدها لتجانس مظهرها.
android:gravity
الكلمة الرئيسية: لتحديد الجاذبية في الصورة النقطية. تشير الجاذبية إلى مكان وضع الصورة القابلة للرسم في حاويتها إذا كانت الصورة النقطية أصغر من الحاوية.

يجب أن تكون قيمة واحدة أو أكثر من القيم الثابتة التالية، مفصولة بـ |:

القيمةالوصف
top ضع الكائن في أعلى الحاوية، بدون تغيير حجمه.
bottom ضَع الكائن في أسفل حاويته بدون تغيير حجمه.
left ضع الكائن على الحافة اليسرى من حاويته، بدون تغيير حجمه.
right ضع الكائن على الحافة اليمنى من حاويته، بدون تغيير حجمه.
center_vertical ضع الكائن في المنتصف الرأسي لحاويته، بدون تغيير حجمه.
fill_vertical عليك زيادة الحجم الرأسي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل.
center_horizontal وضع الكائن في الوسط الأفقي من حاويته، بدون تغيير حجمه.
fill_horizontal عليك زيادة الحجم الأفقي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل.
center ويجب وضع الكائن في منتصف حاويته في كلٍّ من المحور الرأسي والأفقي، بدون تغيير حجمه.
fill عليك زيادة الحجم الأفقي والرأسي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل. وهذا هو الخيار التلقائي.
clip_vertical خيار إضافي يمكن ضبطه على تثبيت حوافه العلوية و/أو السفلى من جانبه بحدود الحاوية. يستند المقطع إلى الجاذبية الرأسية: ي مقاطع جاذبية علوية الحافة السفلية وأقل من الجاذبية السفلية الحافة العلوية، ولا لا مقاطع كلا الحافتين.
clip_horizontal خيار إضافي يمكن ضبطه لاقتصاص حوافه اليسرى و/أو اليمنى من عنصر تابع لحدود الحاوية. يعتمد المقطع على الجاذبية الأفقية: يشبك مقطعٌ للجاذبية اليسرى الحافة اليمنى، بينما يُقصّد الجاذبية اليمنى الحافة اليسرى، ولا يُقصَد بأي منهما كلا الحافتين.
android:mipMap
منطقية تفعِّل هذه السياسة تلميح mipmap أو يوقفه. يمكنك الاطّلاع على setHasMipMap() للحصول على المزيد من المعلومات. وتكون القيمة الافتراضية false (خطأ).
android:tileMode
الكلمة الرئيسية: تعرِّف هذه السياسة وضع "تقسيم الشاشة لأجزاء". عند تمكين وضع تجانب، يتم تكرار الصورة النقطية. يتم تجاهل الجاذبية عند تفعيل وضع التجانب.

يجب أن تكون إحدى القيم الثابتة التالية:

القيمةالوصف
disabled لا تدرج الصورة النقطية. هذه هي القيمة الافتراضية.
clamp كرِّر لون الحافة إذا تخطى أداة التظليل حدودها الأصلية.
repeat كرر صورة أداة التظليل أفقيًا وعموديًا.
mirror كرر صورة أداة التظليل أفقيًا وعموديًا، مع التبديل بين صور المرآة بحيث يتم وصل الصور المجاورة دائمًا.
مثلا:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
راجِع أيضًا:

تسع رقعة

الصورة NinePatch عبارة عن صورة بتنسيق PNG يمكنك من خلالها تحديد مناطق قابلة للتوسيع والتي يضبطها Android عندما يتخطى المحتوى ضمن العرض حدود الصورة العادية. وعادة ما تحدّد هذا النوع من الصور كخلفية لطريقة العرض التي تم فيها ضبط سمة واحدة على الأقل على "wrap_content".

وعندما يكبر العرض لاستيعاب المحتوى، يتم أيضًا تحجيم الصورة المكونة من تسع رقعات لتتناسب مع حجم العرض. ومن الأمثلة على استخدام صورة من تسع رقعات الخلفية التي تستخدمها أداة Button القياسية من Android، والتي يجب أن تمتد لتتوافق مع النص (أو الصورة) داخل الزر.

كما هي الحال مع الصورة النقطية العادية، يمكنك الإشارة إلى ملف مكوَّن من تسع رقعات مباشرةً أو من مورد تم تحديده بتنسيق XML.

لإجراء مناقشة كاملة حول كيفية إنشاء ملف من تسعة لاصقات مع مناطق قابلة للتمديد، راجع إنشاء صور نقطية يمكن تغيير حجمها (ملفات 9 رموز تصحيح).

ملف من تسع رقعات

موقع الملف:
res/drawable/filename.9.png
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على NinePatchDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
مثلا:
عند حفظ الصورة في res/drawable/myninepatch.9.png، يطبِّق تنسيق XML هذا الرقعة التسعة على عرض:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
راجِع أيضًا:

XML تسعة لاصقات

ملف XML المكوَّن من تسعة هو مورد محدد في XML يشير إلى ملف من تسع بات. يستطيع XML تحديد التذبذب للصورة.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على NinePatchDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />
العناصر:
<nine-patch>
يجب ملء هذا الحقل. تحدد مصدر اللاصقة التسعة وخصائصه.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
android:src
مورد قابل للرسم. مَعلمة مطلوبة. الإشارة إلى ملف من تسعة حزم.
android:dither
منطقية تعمل هذه السياسة على تفعيل أو إيقاف تباين الصورة النقطية إذا لم تكن الصورة النقطية لها إعدادات البكسل نفسها المستخدمة على الشاشة، مثل الصورة النقطية 8888 ARGB على شاشة نموذج أحمر أخضر أزرق 565.
مثلا:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

قائمة الطبقات

LayerDrawable هو كائن قابل للرسم يدير مجموعة من العناصر القابلة للرسم الأخرى. ويتم رسم كل عنصر قابل للرسم في القائمة بترتيب القائمة. يتم رسم آخر عنصر قابل للرسم في القائمة في الأعلى.

ويتم تمثيل كل قابل للرسم بعنصر <item> داخل عنصر <layer-list> واحد.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على LayerDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>
العناصر:
<layer-list>
يجب ملء هذا الحقل. يجب أن يكون هذا هو العنصر الجذر. تحتوي على عنصر <item> واحد أو أكثر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
<item>
تحدد عنصرًا قابلاً للرسم ليتم وضعه في الطبقة القابلة للرسم، في موضع يتم تحديده من خلال سماته. يجب أن يكون عنصرًا ثانويًا لعنصر <layer-list>. تقبل عناصر <bitmap> الثانوية.

السمات:

android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. الإشارة إلى مورد قابل للرسم.
android:id
رقم تعريف المورد. معرِّف مورد فريد لهذا الملف القابل للرسم. لإنشاء معرّف مورد جديد لهذا العنصر، استخدم النموذج: "@+id/name". يشير رمز الجمع إلى أنه تم إنشاؤه كمعرف جديد. ويمكنك استخدام هذا المعرّف لاسترداد العنصر القابل للرسم وتعديله باستخدام View.findViewById() أو Activity.findViewById().
android:top
السمة: الإزاحة العلوية، كقيمة سمة أو مورد سمة.
android:right
السمة: الإزاحة اليمنى، مثل قيمة سمة أو مورد سمة.
android:bottom
السمة: الإزاحة السفلية، كقيمة سمة أو مورد سمة
android:left
السمة: الإزاحة اليمنى، كقيمة سمة أو مورد سمة.

يتم تغيير حجم جميع العناصر القابلة للرسم لتناسب حجم العرض الذي يتضمنها افتراضيًا. وبالتالي، قد يؤدي وضع صورك في قائمة طبقات في مواضع مختلفة إلى زيادة حجم العرض، ويتم تغيير حجم بعض الصور حسب الحاجة.

إذا كنت تريد تجنُّب تحجيم العناصر في القائمة، استخدِم عنصر <bitmap> داخل العنصر <item> لتحديد العنصر القابل للرسم وتحديد الجاذبية بالنسبة إلى ما لا يضبط حجمه، مثل "center". على سبيل المثال، تحدّد السمة <item> التالية عنصرًا يمكن تغيير حجمه ليلائم عرض الحاوية:

<item android:drawable="@drawable/image" />

لتجنب التحجيم، يستخدم المثال التالي عنصر <bitmap> مع توسيط الجاذبية:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
مثلا:
تم حفظ ملف XML في res/drawable/layers.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

يستخدم هذا المثال عنصر <bitmap> مدمجًا لتحديد المورد القابل للرسم لكل عنصر ذا جاذبية "center". يضمن ذلك عدم تغيير حجم أي من الصور لتلائم حجم الحاوية، بسبب تغيير الحجم الناتج عن صور الإزاحة.

يطبق تنسيق XML هذا القابل للرسم على طريقة عرض:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

والنتيجة هي تكديس من الصور التي تتم إزاحتها بشكل متزايد:

راجِع أيضًا:

قائمة الولايات

السمة StateListDrawable هي كائن قابل للرسم يتم تعريفه في ملف XML ويستخدم صورًا متعددة لتمثيل الرسم نفسه استنادًا إلى حالة العنصر. على سبيل المثال، يمكن النقر على حالة تطبيق Button المصغّر أو التركيز عليه أو عدم النقر عليه. وباستخدام قائمة حالات قابلة للرسم، يمكنك توفير صورة خلفية مختلفة لكل حالة.

يمكنك وصف قائمة الحالات في ملف XML. ويتم تمثيل كل رسم بعنصر <item> داخل عنصر <selector> واحد. يستخدم كل <item> سمات مختلفة لوصف الحالة التي يتم استخدامها فيها كرسم للرسم.

وخلال كل تغيير في حالة، يتم تمرير قائمة الحالات من الأعلى إلى الأسفل، ويتم استخدام العنصر الأول الذي يطابق الحالة الحالية. لا يعتمد التحديد على "أفضل تطابق"، بل على العنصر الأول الذي يفي بالحد الأدنى من معايير الحالة.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على StateListDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>
العناصر:
<selector>
يجب ملء هذا الحقل. يجب أن يكون هذا هو العنصر الجذر. تحتوي على عنصر <item> واحد أو أكثر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
android:constantSize
منطقية صحيح إذا ظل الحجم الداخلي الوارد في التقرير حول الرسم البياني ثابتًا مع تغيُّر الحالة (الحجم هو الحد الأقصى لجميع الحالات)، وخطأ إذا كان الحجم يختلف بناءً على الحالة الحالية. القيمة التلقائية هي false.
android:dither
منطقية صحيح لتفعيل تباين الصورة النقطية إذا لم تكن للصورة النقطية نفس تهيئة البكسل كما هي الشاشة، مثل الصورة النقطية ARGB 8888 على شاشة RGB 565، وكخطأ لإيقاف الترددات. الإعداد التلقائي هو true.
android:variablePadding
منطقية صحيح إذا تغيرت المساحة المتروكة للرسم بناءً على الحالة الحالية المحددة، وخطأ إذا كانت المساحة المتروكة يجب أن تظل كما هي، بناءً على الحد الأقصى للمساحة المتروكة لجميع الحالات. يتطلب تمكين هذه الميزة أن تتعامل مع التخطيط الأداءي عندما تتغير الحالة، وهو ما لا يتم دعمه غالبًا. القيمة التلقائية هي false.
<item>
تحدد قيمة قابلة للرسم للاستخدام في حالات معيّنة، على النحو الموضّح في سماتها. يجب أن يكون عنصرًا ثانويًا لعنصر <selector>.

السمات:

android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. يشير إلى مورد قابل للرسم.
android:state_pressed
منطقية صحيح إذا تم استخدام هذا العنصر عند النقر على الكائن، مثلاً عند لمس زر، وخطأ إذا تم استخدام هذا العنصر في الحالة التلقائية التي لا يتم النقر عليها.
android:state_focused
منطقية صحيح إذا تم استخدام هذا العنصر عندما يكون للكائن تركيز على الإدخال، على سبيل المثال، عندما يختار المستخدم إدخالاً نصيًا، وخطأ في حال استخدام هذا العنصر في الحالة التلقائية غير المركّزة.
android:state_hovered
منطقية صحيح إذا تم استخدام هذا العنصر عند تمرير المؤشر فوق الكائن، وخطأ إذا تم استخدام هذا العنصر في الحالة التلقائية غير التمرير. في كثير من الأحيان، يمكن أن يكون هذا الرسم نفس الشيء المستخدم للرسم لحالة "التركيز".

تم تقديمه في المستوى 14 من واجهة برمجة التطبيقات.

android:state_selected
منطقية صحيح إذا تم استخدام هذا العنصر عندما يكون الكائن هو اختيار المستخدم الحالي عند التنقل باستخدام عنصر تحكم في الاتجاه، كما هو الحال عند التنقل عبر قائمة باستخدام لوحة التحكم، وخطأ في حالة استخدام هذا العنصر عند عدم تحديد الكائن.

تُستخدَم الحالة المحدّدة عندما لا تكون android:state_focused كافية، مثلاً عندما يكون عرض القائمة بؤرة التركيز ويتم اختيار عنصر داخله باستخدام لوحة التحكّم.

android:state_checkable
منطقية صحيح إذا تم استخدام هذا العنصر عندما يكون الكائن قابلاً للاختيار، وخطأ إذا تم استخدام هذا العنصر عندما يكون الكائن غير قابل للاختيار. لا يكون هذا الإجراء مفيدًا إلا إذا كان من الممكن انتقال الكائن بين أداة قابلة للاختيار وغير قابلة للاختيار.
android:state_checked
منطقية صحيح إذا تم استخدام هذا العنصر عند تحديد الكائن، وخطأ إذا تم استخدامه عند إلغاء تحديد الكائن.
android:state_enabled
منطقية صحيح إذا تم استخدام هذا العنصر عند تفعيل الكائن، مما يعني إمكانية استقبال أحداث اللمس أو النقر، وخطأ إذا تم استخدامه عند إيقاف الكائن.
android:state_activated
منطقية صحيح إذا تم استخدام هذا العنصر عند تفعيل الكائن كتحديد دائم، مثل "تمييز" عنصر القائمة الذي تم اختياره سابقًا في عرض تنقل دائم، وخطأ في حالة استخدامه عند عدم تفعيل الكائن.

تم تقديمه في المستوى 11 من واجهة برمجة التطبيقات.

android:state_window_focused
منطقية صحيح إذا تم استخدام هذا العنصر عندما يكون التركيز على نافذة التطبيق، أي أنّ التطبيق يعمل في المقدّمة، وخطأ إذا كان يُستخدم عندما لا يتم التركيز على نافذة التطبيق، مثلاً عندما يتم سحب مركز الإشعارات للأسفل أو يظهر مربّع حوار.

ملاحظة: يطبّق Android العنصر الأول في قائمة الحالات الذي يطابق الحالة الحالية للكائن. لذلك، إذا كان العنصر الأول في القائمة لا يحتوي على أي من سمات الحالة السابقة، فسيتم تطبيقه في كل مرة. هذا هو السبب في أنك تريد أن تكون القيمة الافتراضية هي الأخيرة دائمًا، كما هو موضح في المثال التالي.

مثلا:
تم حفظ ملف XML في res/drawable/button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

يطبِّق تنسيق XML هذا للتنسيق قائمة الحالات القابلة للرسم على زر:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
راجِع أيضًا:

قائمة المستويات

يشير هذا المصطلح إلى عنصر قابل للرسم يدير عددًا من العناصر البديلة القابلة للرسم، ويتم تخصيص قيمة عددية لكل منها كحدٍ أقصى. يؤدي ضبط قيمة مستوى العنصر القابل للرسم باستخدام setLevel() إلى تحميل المورد القابل للرسم في قائمة المستويات التي تحتوي على قيمة android:maxLevel أكبر من أو تساوي القيمة التي تم تمريرها إلى الطريقة.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على LevelListDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>
العناصر:
<level-list>
يجب ملء هذا الحقل. يجب أن يكون هذا هو العنصر الجذر. تحتوي على عنصر <item> واحد أو أكثر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
<item>
تحدد عنصرًا قابلاً للرسم لاستخدامه على مستوى معين.

السمات:

android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. قم بالإشارة إلى مورد قابل للرسم ليتم إدراجه.
android:maxLevel
عدد صحيح. الحد الأقصى للمستوى المسموح به لهذا العنصر.
android:minLevel
عدد صحيح. الحد الأدنى المسموح به لهذا العنصر.
مثلا:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

بعد تطبيق هذا الحدّ على View، يمكن تغيير المستوى باستخدام setLevel() أو setImageLevel().

راجِع أيضًا:

شكل انتقال قابل للرسم

تمثّل السمة TransitionDrawable كائنًا قابلاً للرسم ويمكن أن يتلاشى بين موردَين آخرَين قابلَين للرسم.

ويتم تمثيل كل قابل للرسم بعنصر <item> داخل عنصر <transition> واحد. لا يُسمح باستخدام أكثر من عنصرين. للانتقال للأمام، يُرجى الاتصال بالرقم startTransition(). للرجوع إلى الخلف، يمكنك طلب reverseTransition().

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على TransitionDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>
العناصر:
<transition>
يجب ملء هذا الحقل. يجب أن يكون هذا هو العنصر الجذر. تحتوي على عنصر <item> واحد أو أكثر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
<item>
تحدِّد العنصر القابل للرسم لاستخدامه كجزء من الانتقال القابل للرسم. يجب أن يكون عنصرًا ثانويًا لعنصر <transition>. تقبل عناصر <bitmap> الثانوية.

السمات:

android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. الإشارة إلى مورد قابل للرسم.
android:id
رقم تعريف المورد. معرِّف مورد فريد لهذا الملف القابل للرسم. لإنشاء معرّف مورد جديد لهذا العنصر، استخدم النموذج: "@+id/name". يشير رمز الجمع إلى أنه تم إنشاؤه كمعرف جديد. ويمكنك استخدام هذا المعرّف لاسترداد العنصر القابل للرسم وتعديله باستخدام View.findViewById() أو Activity.findViewById().
android:top
عدد صحيح. الإزاحة العلوية بالبكسل.
android:right
عدد صحيح. الإزاحة اليمنى بالبكسل.
android:bottom
عدد صحيح. الإزاحة السفلية بالبكسل
android:left
عدد صحيح. الإزاحة اليسرى بالبكسل.
مثلا:
تم حفظ ملف XML في res/drawable/transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

يطبق تنسيق XML هذا القابل للرسم على طريقة عرض:

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

وينفذ الرمز التالي انتقالاً بمقدار 500 ملي ثانية من العنصر الأول إلى العنصر الثاني:

Kotlin

val button: ImageButton = findViewById(R.id.button)
val drawable: Drawable = button.drawable
if (drawable is TransitionDrawable) {
    drawable.startTransition(500)
}

Java

ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
    ((TransitionDrawable) drawable).startTransition(500);
}
راجِع أيضًا:

مساحة قابلة للرسم

عبارة عن قابلة للرسم معرَّفة في ملف XML وتتضمّن مساحة أخرى قابلة للرسم بمسافة محدّدة. ويكون هذا مفيدًا عندما يحتاج العرض إلى خلفية أصغر من الحدود الفعلية للعرض.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على InsetDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />
العناصر:
<inset>
يجب ملء هذا الحقل. تحدد العنصر الداخلي القابل للرسم. يجب أن يكون هذا هو العنصر الجذر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. قم بالإشارة إلى مورد قابل للرسم ليتم إدراجه.
android:insetTop
السمة: الغرفة الداخلية العلوية، كقيمة سمة أو مورد سمة.
android:insetRight
السمة: الإدخال الصحيح، كقيمة سمة أو مورد سمة.
android:insetBottom
السمة: الغرفة الداخلية السفلى، كقيمة سمة أو مورد سمة.
android:insetLeft
السمة: اللوحة اليمنى، باعتبارها قيمة سمة أو مورد سمة.
مثلا:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />
راجِع أيضًا:

المقطع قابل للرسم

عبارة عن قابلة للرسم معرَّفة في ملف XML يتم من خلالها اقتصاص مادة قابلة للرسم أخرى بناءً على المستوى الحالي لهذه المادة القابلة للرسم. ويمكنك التحكّم في مدى قصّ الطفل القابل للرسم في العرض والارتفاع بناءً على المستوى، بالإضافة إلى الجاذبية التي تتيح لك التحكّم في مكان وضع الطفل في حاويته الإجمالية. يُستخدم غالبًا لتنفيذ أشياء مثل أشرطة التقدم.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على ClipDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
العناصر:
<clip>
يجب ملء هذا الحقل. لتحديد المقطع القابل للرسم. يجب أن يكون هذا هو العنصر الجذر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. الإشارة إلى مورد قابل للرسم ليتم اقتصاصه.
android:clipOrientation
الكلمة الرئيسية: اتجاه المقطع.

يجب أن تكون إحدى القيم الثابتة التالية:

القيمةالوصف
horizontal قم بقص العنصر القابل للرسم أفقيًا.
vertical قم بقص العنصر القابل للرسم عموديًا.
android:gravity
الكلمة الرئيسية: تحدد هذه السمة مكان المقطع داخل العنصر القابل للرسم.

يجب أن تكون قيمة واحدة أو أكثر من القيم الثابتة التالية، مفصولة بـ |:

القيمةالوصف
top ضع الكائن في أعلى الحاوية، بدون تغيير حجمه. عندما تكون قيمة clipOrientation "vertical"، يحدث الاقتصاص أسفل العنصر القابل للرسم.
bottom ضَع الكائن في أسفل حاويته بدون تغيير حجمه. عندما تكون قيمة clipOrientation "vertical"، يحدث الاقتصاص أعلى العنصر القابل للرسم.
left ضع الكائن على الحافة اليسرى من حاويته، بدون تغيير حجمه. وهذا هو الخيار التلقائي. عندما تكون قيمة clipOrientation "horizontal"، يحدث الاقتصاص في الجانب الأيمن من العنصر القابل للرسم.
right ضع الكائن على الحافة اليمنى من حاويته، بدون تغيير حجمه. عندما تكون قيمة clipOrientation "horizontal"، يحدث الاقتصاص في الجانب الأيسر من العنصر القابل للرسم.
center_vertical ضع الكائن في المنتصف الرأسي لحاويته، بدون تغيير حجمه. يعمل الاقتصاص بنفس الطريقة عندما تكون الجاذبية "center".
fill_vertical عليك زيادة الحجم الرأسي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل. عندما تكون قيمة clipOrientation هي "vertical"، لا يحدث أي اقتصاص لأنّ العنصر القابل للرسم يملأ المساحة العمودية (ما لم يكن المستوى القابل للرسم هو 0، فلن يكون مرئيًا في هذه الحالة).
center_horizontal ضع الكائن في الوسط الأفقي من حاويته، بدون تغيير حجمه. لا يؤدّي الاقتصاص إلى تغيير سلوكه عندما تكون الجاذبية "center".
fill_horizontal عليك زيادة الحجم الأفقي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل. عندما تكون قيمة clipOrientation "horizontal"، لا يحدث أي اقتصاص لأنّ الجزء القابل للرسم يملأ المساحة الأفقية (ما لم يكن المستوى القابل للرسم هو 0، لا يكون مرئيًا في هذه الحالة).
center ويجب وضع الكائن في منتصف حاويته في كلٍّ من المحور الرأسي والأفقي، بدون تغيير حجمه. عندما تكون قيمة clipOrientation "horizontal"، يحدث الاقتصاص في الجانب الأيسر والأيمن. عندما تكون قيمة clipOrientation "vertical"، يحدث الاقتصاص في الأعلى والأسفل.
fill عليك زيادة الحجم الأفقي والرأسي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل. لا يحدث أي اقتصاص لأن الجزء القابل للرسم يملأ المساحة الأفقية والرأسية (ما لم يكن المستوى القابل للرسم هو 0، فلن يكون مرئيًا في هذه الحالة).
clip_vertical خيار إضافي يمكن ضبطه على تثبيت حوافه العلوية و/أو السفلى من جانبه بحدود الحاوية. يستند المقطع إلى الجاذبية الرأسية: ي مقاطع جاذبية علوية الحافة السفلية وأقل من الجاذبية السفلية الحافة العلوية، ولا لا مقاطع كلا الحافتين.
clip_horizontal خيار إضافي يمكن ضبطه لاقتصاص حوافه اليسرى و/أو اليمنى من عنصر تابع لحدود الحاوية. يعتمد المقطع على الجاذبية الأفقية: يشبك مقطعٌ للجاذبية اليسرى الحافة اليمنى، بينما يُقصّد الجاذبية اليمنى الحافة اليسرى، ولا يُقصَد بأي منهما كلا الحافتين.
مثلا:
تم حفظ ملف XML في res/drawable/clip.xml:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

يطبّق تنسيق XML التالي المقطع القابل للرسم على طريقة عرض:

<ImageView
    android:id="@+id/image"
    android:src="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

يصبح الرمز البرمجي التالي قابلاً للرسم ويزيد من عدد القطع للكشف عن الصورة تدريجيًا:

Kotlin

val imageview: ImageView = findViewById(R.id.image)
val drawable: Drawable = imageview.background
if (drawable is ClipDrawable) {
    drawable.level = drawable.level + 1000
}

Java

ImageView imageview = (ImageView) findViewById(R.id.image);
Drawable drawable = imageview.getBackground();
if (drawable instanceof ClipDrawable) {
    ((ClipDrawable)drawable).setLevel(drawable.getLevel() + 1000);
}

تؤدي زيادة المستوى إلى تقليل مقدار الاقتصاص والكشف عن الصورة ببطء. ها هو عند مستوى 7000:

ملاحظة: المستوى التلقائي هو 0، الذي يتم اقتصاصه بالكامل بحيث لا تكون الصورة مرئية. وعندما يبلغ المستوى 10,000، لا يتم اقتصاص الصورة وتكون مرئية بالكامل.

راجِع أيضًا:

قابل للرسم على نطاق واسع

هي عبارة عن قابلة للرسم يتم تحديدها في ملف XML، ويتم فيها تغيير حجم مادة عرض أخرى قابلة للرسم بناءً على مستواها الحالي.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على ScaleDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />
العناصر:
<scale>
يجب ملء هذا الحقل. تحدد المقياس القابل للرسم. يجب أن يكون هذا هو العنصر الجذر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
android:drawable
مورد قابل للرسم. مَعلمة مطلوبة. الإشارة إلى مورد قابل للرسم.
android:scaleGravity
الكلمة الرئيسية: تحدد موضع الجاذبية بعد تغيير الحجم.

يجب أن تكون قيمة واحدة أو أكثر من القيم الثابتة التالية، مفصولة بـ |:

القيمةالوصف
top ضع الكائن في أعلى الحاوية، بدون تغيير حجمه.
bottom ضَع الكائن في أسفل حاويته بدون تغيير حجمه.
left ضع الكائن على الحافة اليسرى من حاويته، بدون تغيير حجمه. وهذا هو الخيار التلقائي.
right ضع الكائن على الحافة اليمنى من حاويته، بدون تغيير حجمه.
center_vertical ضع الكائن في المنتصف الرأسي لحاويته، بدون تغيير حجمه.
fill_vertical عليك زيادة الحجم الرأسي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل.
center_horizontal ضع الكائن في الوسط الأفقي من حاويته، بدون تغيير حجمه.
fill_horizontal عليك زيادة الحجم الأفقي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل.
center ويجب وضع الكائن في منتصف حاويته في كلٍّ من المحور الرأسي والأفقي، بدون تغيير حجمه.
fill عليك زيادة الحجم الأفقي والرأسي للكائن إذا لزم الأمر حتى يملأ حاويته بالكامل.
clip_vertical خيار إضافي يمكن ضبطه على تثبيت حوافه العلوية و/أو السفلى من جانبه بحدود الحاوية. يستند المقطع إلى الجاذبية الرأسية: ي مقاطع جاذبية علوية الحافة السفلية وأقل من الجاذبية السفلية الحافة العلوية، ولا لا مقاطع كلا الحافتين.
clip_horizontal خيار إضافي يمكن ضبطه لاقتصاص حوافه اليسرى و/أو اليمنى من عنصر تابع لحدود الحاوية. يعتمد المقطع على الجاذبية الأفقية: يشبك مقطعٌ للجاذبية اليسرى الحافة اليمنى، بينما يُقصّد الجاذبية اليمنى الحافة اليسرى، ولا يُقصَد بأي منهما كلا الحافتين.
android:scaleHeight
النسبة المئوية. ارتفاع المقياس، ويتم التعبير عنه كنسبة مئوية من حدود العنصر القابل للرسم. تنسيق القيمة هو XX%، مثل 100% أو 12.5%.
android:scaleWidth
النسبة المئوية. عرض المقياس، ويتم التعبير عنه كنسبة مئوية من حدود العنصر القابل للرسم. تنسيق القيمة هو XX%، مثل 100% أو 12.5%.
مثلا:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />
راجِع أيضًا:

شكل قابل للرسم

هذا شكل عام معرَّف في XML.

موقع الملف:
res/drawable/filename.xml
اسم الملف هو رقم تعريف المورد
نوع بيانات المورد المجمّع:
مؤشر المرجع على GradientDrawable
مرجع للموارد:
في لغة Java: R.drawable.filename
في ملف XML: @[package:]drawable/filename
بناء الجملة:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
العناصر:
<shape>
يجب ملء هذا الحقل. الشكل القابل للرسم. يجب أن يكون هذا هو العنصر الجذر.

السمات:

xmlns:android
سلسلة: يجب ملء هذا الحقل. تحدّد هذه السياسة مساحة اسم XML التي يجب أن تكون "http://schemas.android.com/apk/res/android".
android:shape
الكلمة الرئيسية: تحدد نوع الشكل. القيم الصالحة هي:
القيمةالوصف
"rectangle" مستطيل يملأ طريقة العرض المتضمنة. هذا هو الشكل الافتراضي.
"oval" شكل بيضاوي يناسب أبعاد العرض الذي يحتوي على الصورة.
"line" خط أفقي يمتد بعرض العرض الذي يتضمن الصورة. يتطلب هذا الشكل العنصر <stroke> لتحديد عرض الخط.
"ring" شكل خاتم.

لا يتم استخدام السمات التالية إلا عند استخدام android:shape="ring":

android:innerRadius
السمة: نصف القطر للجزء الداخلي من الحلقة (الثقب في المنتصف)، كقيمة بُعد أو مورد مكوّن.
android:innerRadiusRatio
التعويم: نصف القطر للجزء الداخلي من الحلقة، يعبر عنه بنسبة عرض الحلقة. على سبيل المثال، إذا android:innerRadiusRatio="5"، فإن نصف القطر الداخلي يساوي عرض الحلقة مقسومًا على 5. تم إلغاء هذه القيمة من خلال android:innerRadius. القيمة التلقائية هي 9.
android:thickness
السمة: سُمك الحلقة، بصفتها قيمة بُعد أو مورد بُعد.
android:thicknessRatio
التعويم: سمك الخاتم الذي يعبر عنه كنسبة عرض الحلقة. على سبيل المثال، إذا android:thicknessRatio="2"، فإن السُمك يساوي عرض الحلقة مقسومًا على 2. تم إلغاء هذه القيمة من خلال android:innerRadius. والقيمة الافتراضية هي 3.
android:useLevel
منطقية صحيح إذا تم استخدام هذه السمة على أنّها LevelListDrawable. هذا خطأ عادة، أو قد لا يظهر الشكل الخاص بك.
<corners>
لإنشاء زوايا مستديرة للشكل. ينطبق فقط عندما يكون الشكل مستطيلاً.

السمات:

android:radius
السمة: نصف القطر لجميع الزوايا، كقيمة سمة أو مورد سمة. يتم تجاوز هذا لكل زاوية من خلال السمات التالية.
android:topLeftRadius
السمة: النطاق الجغرافي للركن العلوي الأيمن، كقيمة سمة أو مورد سمة.
android:topRightRadius
السمة: النطاق الجغرافي للركن العلوي الأيسر، كقيمة سمة أو مورد سمة.
android:bottomLeftRadius
السمة: النطاق الجغرافي أسفل يمين الصفحة، كقيمة سمة أو مورد سمة.
android:bottomRightRadius
السمة: النطاق الجغرافي أسفل يسار الصفحة، كقيمة سمة أو مورد سمة.

ملاحظة: يجب في البداية تحديد نصف قطر زاوية أكبر من 1 لكل زاوية، وإلا يجب ألا تكون الزوايا مستديرة. إذا كنت تريد عدم تقريب زوايا معيّنة، يمكنك استخدام android:radius لضبط نصف قطر تلقائي للزاوية أكبر من 1 واستبدال كل زاوية بالقيم التي تريدها حقًا، مع توفير 0 ("0dp") حيث لا تريد زوايا مستديرة.

<gradient>
لتحديد لون متدرج للشكل.

السمات:

android:angle
عدد صحيح. زاوية التدرج بالدرجات. 0 من اليسار إلى اليمين، و90 في الأسفل إلى الأعلى. يجب أن يكون أحد مضاعفات 45. القيمة التلقائية هي 0.
android:centerX
التعويم: الموضع X النسبي لمركز التدرج (0 - 1.0).
android:centerY
التعويم: الموضع Y النسبي لمركز التدرج (0 - 1.0).
android:centerColor
اللون: لون اختياري يأتي بين لوني البداية والنهاية، كقيمة سداسية عشرية أو مورد لون.
android:endColor
اللون: لون النهاية، كقيمة سداسية عشرية أو مورد لون.
android:gradientRadius
التعويم: نصف قطر التدرج. يتم تطبيقها فقط عند android:type="radial".
android:startColor
اللون: لون البداية، على أنه قيمة سداسية عشرية أو مورد لون.
android:type
الكلمة الرئيسية: نوع نمط التدرج المراد تطبيقه. القيم الصالحة هي:
القيمةالوصف
"linear" تدرج خطي. وهذا هو الخيار التلقائي.
"radial" تدرج شعاعي. لون البداية هو اللون الأوسط.
"sweep" تدرج خط شامل.
android:useLevel
منطقية صحيح إذا تم استخدام هذه السمة كقيمة LevelListDrawable.
<padding>
المساحة المتروكة لتطبيقها على عنصر العرض الذي يتضمّن المحتوى وهذا من شأنه أن يبطئ موضع محتوى العرض، وليس الشكل.

السمات:

android:left
السمة: المساحة المتروكة اليسرى، كقيمة سمة أو مورد سمة
android:top
السمة: المساحة المتروكة العلوية، كقيمة سمة أو مورد سمة
android:right
السمة: المساحة المتروكة اليمنى، كقيمة سمة أو مورد سمة
android:bottom
السمة: المساحة المتروكة السفلية، كقيمة سمة أو مورد سمة
<size>
حجم الشكل.

السمات:

android:height
السمة: ارتفاع الشكل، كقيمة سمة أو مورد سمة.
android:width
السمة: عرض الشكل، كقيمة سمة أو مورد سمة.

ملاحظة: بشكلٍ افتراضي، يتم تغيير حجم الشكل إلى حجم عرض الحاوية بما يتناسب مع الأبعاد المحددة هنا. عند استخدام الشكل في ImageView، يمكنك تقييد تغيير الحجم من خلال ضبط android:scaleType على "center".

<solid>
لون ثابت لملء الشكل.

السمات:

android:color
اللون: اللون المطلوب تطبيقه على الشكل، كقيمة سداسية عشرية أو مورد لون.
<stroke>
خط خط للشكل.

السمات:

android:width
السمة: سُمك الخط، مثل قيمة سمة أو مورد سمة.
android:color
اللون: لون الخط، مثل قيمة سداسية عشرية أو مورد لون.
android:dashGap
السمة: المسافة بين الشُرط، بصفتها قيمة سمة أو مورد سمة. صالحة فقط إذا تم ضبط android:dashWidth.
android:dashWidth
السمة: حجم كل خط شرطة، كقيمة سمة أو مورد سمة صالحة فقط إذا تم ضبط android:dashGap.
مثلا:
تم حفظ ملف XML في res/drawable/gradient_box.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

يطبق تنسيق XML هذا الشكل القابل للرسم على طريقة عرض:

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

يحصل رمز التطبيق هذا على الشكل القابل للرسم ويطبّقه على طريقة عرض:

Kotlin

val shape: Drawable? = getDrawable(resources, R.drawable.gradient_box, getTheme())

val tv: TextView = findViewById(R.id.textview)
tv.background = shape

Java

Resources res = getResources();
Drawable shape = ResourcesCompat.getDrawable(res, R.drawable.gradient_box, getTheme());

TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
راجِع أيضًا: