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

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

ملف Bitmap
ملف رسم صورة نقطية (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 لونًا إلى تنسيق 8 بت PNG مع لوحة ألوان. وينتج عن ذلك صورة بجودة متساوية تتطلب قدرًا أقل من الذاكرة.

لذا، يجب الانتباه إلى أنّ برامج الصور الثنائية الموضوعة في هذا الدليل يمكن أن تتغير أثناء عملية الإنشاء. في حال حذف تخطط لقراءة صورة كمجموعة بث بت لتحويلها إلى صورة نقطية، ثم وضع صورك المجلد 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
منطقي. تفعيل إزاحة الصورة النقطية أو إيقافها إذا لم يتم ذلك لها نفس إعدادات البكسل مثل الشاشة، مثل الصورة النقطية ARGB 8888 على النموذج RGB 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.

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

ملف تسعة تصحيح

مكان الملف:

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
منطقي. تفعيل إزاحة الصورة النقطية أو إيقافها إذا لم يتم ذلك لها نفس إعدادات البكسل مثل الشاشة، مثل الصورة النقطية ARGB 8888 على النموذج RGB 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 إذا كان الحجم يختلف على أساس الحالة الحالية. وتكون القيمة التلقائية false.
android:dither
منطقي. "صحيح" لتفعيل إزاحة الصورة النقطية إذا لم تكن الصورة النقطية تحتوي على نفس وحدة البكسل الإعدادات كالشاشة، مثل صورة نقطية بتنسيق ARGB 8888 على شاشة RGB 565 خطأ إلى وتعطيل التدريج. وتكون القيمة التلقائية هي true.
android:variablePadding
منطقي. صحيح إذا كانت المساحة المتروكة القابلة للرسم تتغير بناءً على الحالة المحددة false إذا كانت المساحة المتروكة يجب أن تظل كما هي بناءً على الحد الأقصى مساحة متروكة لكل الحالات. يتطلّب تفعيل هذه الميزة منك التعامل مع تنفيذ تخطيط عند تغير الحالة، وهو ما لا يكون مدعومًا غالبًا. وتكون القيمة التلقائية false.
<item>
وهي عبارة عن عنصر قابل للرسم لاستخدامه خلال حالات معيّنة، كما هو موضّح في سماته. يجب أن تكون التابعة لعنصر <selector>.

السمات:

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

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

android:state_selected
منطقي. صواب إذا تم استخدام هذا العنصر عندما يكون الكائن هو الحالي اختيار المستخدمين عند التنقّل باستخدام عنصر تحكّم في الاتجاهات، مثلاً عند التنقّل في قائمة باستخدام لوحة التحكم؛ على القيمة "false" في حال استخدام هذا العنصر عندما لا يتم اختيار الكائن.

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

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

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

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

ملاحظة: يُطبِّق 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
منطقي. True إذا تم استخدام ذلك 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);
راجِع أيضًا: