منابع ترسیم‌شدنی

منبع ترسیم‌شدنی مفهومی کلی برای گرافیکی است که می‌تواند روی صفحه ترسیم شود و می‌توانید آن را با میاناهای برنامه‌سازی کاربردی مانند getDrawable(int) بازیابی کنید یا با مشخصه‌هایی مانند android:drawable و android:icon در منبع XML دیگری اعمال کنید. چندین نوع drawable وجود دارد:

فایل بیت‌مپ
فایل گرافیکی نقشه بیتی (PNG،‏ WEBP،‏ JPG، یا GIF). BitmapDrawable ایجاد می‌کند.
فایل Nine-patch
فایل PNG با مناطق قابل‌کشش برای تغییر اندازه تصاویر براساس محتوا (.9.png). NinePatchDrawable ایجاد می‌کند.
فهرست لایه‌ها
یک drawable که آرایه‌ای از drawableهای دیگر را مدیریت می‌کند. این‌ها به‌ترتیب آرایه ترسیم می‌شوند، بنابراین عنصر با بزرگ‌ترین نمایه در بالا ترسیم می‌شود. LayerDrawable ایجاد می‌کند.
فهرست ایالت‌ها
فایل XML که به گرافیک‌های بیت‌مپ مختلف برای حالت‌های مختلف ارجاع می‌دهد—برای مثال، برای استفاده از تصویر متفاوت وقتی روی دکمه‌ای تک‌ضرب زده می‌شود. StateListDrawable ایجاد می‌کند.
فهرست سطح
فایل XML که یک drawable را تعریف می‌کند که تعدادی drawable جایگزین را مدیریت می‌کند، هرکدام یک مقدار عددی حداکثر اختصاص داده شده است. LevelListDrawable ایجاد می‌کند.
Transition drawable
فایل XML که ترسیم‌شدنی‌ای را تعریف می‌کند که می‌تواند بین دو منبع ترسیم‌شدنی محو متقاطع شود. TransitionDrawable ایجاد می‌کند.
Inset drawable
فایل XML که یک drawable را تعریف می‌کند که drawable دیگری را با فاصله مشخصی درج می‌کند. این زمانی مفید است که یک نما به یک پس‌زمینه قابل ترسیم نیاز دارد که از مرزهای واقعی نما کوچک‌تر باشد.
Clip drawable
فایل XML که یک drawable را تعریف می‌کند که drawable دیگری را براساس مقدار سطح فعلی این drawable برش می‌دهد. ClipDrawable ایجاد می‌کند.
مقیاس‌بندی قابل‌ترسیم
فایل XML که یک drawable را تعریف می‌کند که اندازه drawable دیگری را براساس مقدار سطح فعلی آن تغییر می‌دهد. ScaleDrawable
ایجاد می‌کند
ترسیم‌پذیر شکل.
فایل XML که شکل هندسی را تعریف می‌کند، ازجمله رنگ‌ها و گرادیان‌ها. GradientDrawable ایجاد می‌کند.

برای کسب اطلاعات درباره نحوه ایجاد AnimationDrawable، به سند منابع پویانمایی مراجعه کنید.

توجه: از منبع رنگ می‌توان به‌عنوان یک drawable در XML نیز استفاده کرد. برای مثال، هنگام ایجاد فهرست وضعیت قابل‌ترسیم، می‌توانید به منبع رنگ برای مشخصه android:drawable (android:drawable="@color/green") ارجاع دهید.

بیت‌مپ

تصویر بیت‌مپ. Android از فایل‌های بیت‌مپ در قالب‌های زیر پشتیبانی می‌کند: PNG (ترجیح داده می‌شود)، WEBP (ترجیح داده می‌شود، به سطح میانای برنامه‌سازی کاربردی ۱۷ یا بالاتر نیاز دارد)، JPG (قابل‌قبول)، GIF (توصیه نمی‌شود).

می‌توانید مستقیماً به فایل نقشه بیتی ارجاع دهید، از نام فایل به‌عنوان شناسه منبع استفاده کنید، یا شناسه منبع دگرنام در XML ایجاد کنید.

توجه: فایل‌های Bitmap ممکن است به‌طور خودکار با فشرده‌سازی تصویر بدون اتلاف توسط ابزار aapt درطول فرایند ساخت بهینه‌سازی شوند. برای مثال، یک PNG رنگ واقعی که به بیش‌از ۲۵۶ رنگ نیاز ندارد ممکن است به یک PNG‏ ۸ بیتی با پالت رنگ تبدیل شود. این کار باعث می‌شود تصویری با کیفیت یکسان ایجاد شود که به حافظه کمتری نیاز دارد.

بنابراین، توجه داشته باشید که باینری‌های تصویر قرار داده‌شده در این دایرکتوری ممکن است درطول ساخت تغییر کنند. اگر قصد دارید تصویری را به‌صورت جریان بیت بخوانید تا آن را به بیت‌مپ تبدیل کنید، تصاویرتان را در پوشه res/raw/ قرار دهید که در آنجا بهینه‌سازی نمی‌شوند.

فایل بیت‌مپ

فایل نگاشت بیتی فایلی از نوع PNG،‏ WEBP،‏ JPG، یا GIF است. وقتی این فایل‌ها را در فهرست راهنمای res/drawable/ ذخیره می‌کنید، Android برای هرکدام از آن‌ها منبع 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 بازیابی می‌کند:

کاتلین

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

جاوا

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() مراجعه کنید. مقدار پیش‌فرض نادرست است.
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" />
همچنین ببینید:

Nine-patch

NinePatch یک تصویر PNG است که در آن می‌توانید مناطق قابل‌کشش را تعریف کنید که Android وقتی محتوای داخل نما از حدود عادی تصویر فراتر می‌رود، آن‌ها را مقیاس‌بندی می‌کند. معمولاً این نوع تصویر را به‌عنوان پس‌زمینه نمایی اختصاص می‌دهید که حداقل یک بُعد آن روی "wrap_content" تنظیم شده باشد.

وقتی نما برای جا دادن محتوا بزرگ می‌شود، تصویر nine-patch نیز برای مطابقت با اندازه نما مقیاس‌بندی می‌شود. نمونه‌ای از کاربرد تصویر nine-patch، پس‌زمینه استفاده‌شده توسط ابزاره استاندارد Button Android است که باید برای جا دادن نوشتار (یا تصویر) داخل دکمه کشیده شود.

همانند بیت‌مپ معمولی، می‌توانید مستقیماً به فایل nine-patch ارجاع دهید یا از منبعی که XML تعریف کرده است.

برای بحث کامل درباره نحوه ایجاد فایل nine-patch با مناطق قابل‌کشش، به ایجاد نقشه بیتی با اندازه قابل‌تغییر (فایل‌های 9-patch) مراجعه کنید.

فایل Nine-patch

مکان فایل:
res/drawable/filename.9.png
نام فایل شناسه منبع است
نوع داده منبع کامپایل‌شده:
اشاره‌گر منبع به NinePatchDrawable
مرجع منبع:
در Java: R.drawable.filename
در XML: @[package:]drawable/filename
مثال:
با تصویری که در res/drawable/myninepatch.9.png ذخیره شده است، این XML چیدمان nine-patch را روی یک نما اعمال می‌کند:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
همچنین ببینید:

XML nine-patch

XML nine-patch منبعی است که در XML تعریف شده است و به فایل nine-patch اشاره می‌کند. 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>
الزامی. منبع nine-patch و ویژگی‌های آن را تعریف می‌کند.

مشخصه ها:

xmlns:android
رشته. الزامی است. فضای نام XML را تعریف می‌کند که باید "http://schemas.android.com/apk/res/android" باشد.
android:src
منبع ترسیم‌شدنی. الزامی. ارجاع به فایل nine-patch.
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 شیء قابل‌ترسیمی است که آرایه‌ای از قابل‌ترسیم‌های دیگر را مدیریت می‌کند. هر drawable در فهرست به‌ترتیب فهرست ترسیم می‌شود. آخرین عنصر قابل‌رسم در فهرست در بالا رسم می‌شود.

هر drawable با یک عنصر <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>
یک drawable را برای قرار دادن در drawable لایه، در موقعیتی که توسط ویژگی‌های آن تعریف شده است، تعریف می‌کند. باید فرزند عنصر <layer-list> باشد. عناصر فرزند <bitmap> را می‌پذیرد.

مشخصه ها:

android:drawable
منبع ترسیم‌شدنی. الزامی. ارجاع به منبع ترسیم‌شدنی.
android:id
شناسه منبع. شناسه منبع یکتا برای این drawable. برای ایجاد شناسه منبع جدید برای این مورد، از این فرم استفاده کنید: "@+id/name". علامت به‌علاوه نشان می‌دهد که این شناسه به‌عنوان شناسه جدیدی ایجاد شده است. می‌توانید از این شناسه برای بازیابی و اصلاح کردن drawable با View.findViewById() یا Activity.findViewById() استفاده کنید.
android:top
بعد. انحراف بالا، به‌عنوان مقدار بُعد یا منبع بُعد.
android:right
بعد. انحراف راست، به‌عنوان مقدار بُعد یا منبع بُعد.
android:bottom
بعد. انحراف پایین، به‌عنوان مقدار بعد یا منبع بعد.
android:left
بعد. انحراف چپ، به‌عنوان مقدار بُعد یا منبع بُعد.

به‌طور پیش‌فرض، همه موارد قابل‌رسم به‌اندازه نمای حاوی آن‌ها مقیاس‌بندی می‌شوند. بنابراین، قرار دادن تصاویر در فهرست لایه در موقعیت‌های مختلف ممکن است اندازه نما را افزایش دهد، و برخی‌از تصاویر به‌طور مناسب مقیاس‌بندی می‌شوند.

برای جلوگیری از مقیاس‌بندی موارد در فهرست، از عنصر <bitmap> در عنصر <item> استفاده کنید تا drawable را مشخص کنید و جاذبه را برای چیزی تعریف کنید که مقیاس‌بندی نمی‌شود، مانند "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 چیدمان، drawable را روی نما اعمال می‌کند:

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

نتیجه، دسته‌ای از تصاویر با جابه‌جایی فزاینده است:

همچنین ببینید:

فهرست ایالت‌ها

StateListDrawable یک شیء قابل‌رسم است که در XML تعریف شده است و از چندین تصویر برای نمایش یک گرافیک یکسان استفاده می‌کند، بسته به وضعیت شیء. برای مثال، وضعیت ابزاره Button می‌تواند تک‌ضرب زده، متمرکز، یا هیچ‌کدام باشد؛ بااستفاده از فهرست وضعیت قابل‌رسم، می‌توانید تصویر پس‌زمینه متفاوتی برای هر وضعیت ارائه دهید.

فهرست وضعیت را در فایل XML شرح می‌دهید. هر گرافیک با یک عنصر <item> در داخل یک عنصر <selector> نشان داده می‌شود. هر <item> از مشخصه‌های مختلفی برای توصیف حالتی که در آن به‌عنوان گرافیک برای drawable استفاده می‌شود، استفاده می‌کند.

درطول هر تغییر وضعیت، فهرست وضعیت از بالا به پایین پیمایش می‌شود و اولین موردی که با وضعیت فعلی مطابقت دارد استفاده می‌شود. این انتخاب براساس «بهترین مطابقت» نیست، بلکه اولین موردی است که حداقل معیارهای ایالت را برآورده می‌کند.

مکان فایل:
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
بولی. اگر اندازه داخلی گزارش‌شده drawable با تغییر وضعیت ثابت بماند (اندازه حداکثر همه وضعیت‌ها است)، مقدار True است؛ اگر اندازه براساس وضعیت فعلی تغییر کند، مقدار False است. پیش‌فرض false است.
android:dither
بولی. True برای فعال کردن لرزش نگاشت بیتی اگر نگاشت بیتی پیکربندی پیکسل یکسانی با صفحه نداشته باشد، مثل نگاشت بیتی ARGB 8888 در صفحه RGB 565؛ false برای غیرفعال کردن لرزش. پیش‌فرض «درست» است.
android:variablePadding
بولی. اگر لایی‌گذاری drawable براساس وضعیت فعلی انتخاب‌شده تغییر کند، درست است؛ اگر لایی‌گذاری باید براساس حداکثر لایی‌گذاری همه وضعیت‌ها یکسان بماند، نادرست است. برای فعال کردن این ویژگی، باید با اجرای چیدمان هنگام تغییر وضعیت سروکار داشته باشید که اغلب پشتیبانی نمی‌شود. پیش‌فرض false است.
<item>
یک drawable را برای استفاده در حالت‌های خاص، همان‌طور که توسط ویژگی‌های آن توصیف شده است، تعریف می‌کند. باید فرزند عنصر <selector> باشد.

مشخصه ها:

android:drawable
منبع ترسیم‌شدنی. الزامی. ارجاع به منبع ترسیم‌شدنی.
android:state_pressed
بولی. اگر این مورد هنگام تک‌ضرب زدن روی شیء استفاده شود، مثلاً وقتی دکمه‌ای لمس شود، «درست» است؛ اگر این مورد در حالت پیش‌فرض و بدون تک‌ضرب زدن استفاده شود، «نادرست» است.
android:state_focused
بولی. درست اگر این مورد زمانی استفاده شود که شیء دارای تمرکز ورودی باشد، مثلاً وقتی کاربر ورودی نوشتاری را انتخاب می‌کند؛ نادرست اگر این مورد در حالت پیش‌فرض، غیرمتمرکز استفاده شود.
android:state_hovered
بولی. درست اگر این مورد زمانی استفاده شود که مکان‌نما روی شیء نگه داشته شود؛ نادرست اگر این مورد در حالت پیش‌فرض و بدون نگه داشتن مکان‌نما استفاده شود. اغلب، این drawable می‌تواند همان drawable استفاده‌شده برای حالت «متمرکز» باشد.

در سطح میانای برنامه‌سازی کاربردی ۱۴ معرفی شد.

android:state_selected
بولی. درست اگر این مورد زمانی استفاده شود که شیء انتخاب کاربر فعلی هنگام پیمایش با کنترل جهت‌دار باشد، مثلاً هنگام پیمایش در فهرست با پد کنترل؛ نادرست اگر این مورد زمانی استفاده شود که شیء انتخاب نشده باشد.

وقتی android:state_focused کافی نباشد، از وضعیت انتخاب‌شده استفاده می‌شود، مثلاً وقتی نمای فهرستی در کانون توجه باشد و موردی در آن با پد کنترل انتخاب شود.

android:state_checkable
بولی. درست اگر این مورد زمانی استفاده شود که شیء قابل‌انتخاب باشد؛ نادرست اگر این مورد زمانی استفاده شود که شیء قابل‌انتخاب نباشد. فقط درصورتی مفید است که شیء بتواند بین ابزاره انتخاب‌شدنی و انتخاب‌نشدنی جابه‌جا شود.
android:state_checked
بولی. درست اگر این مورد هنگام انتخاب شیء استفاده شود؛ نادرست اگر هنگام لغو انتخاب شیء استفاده شود.
android:state_enabled
بولی. درست اگر این مورد زمانی استفاده شود که شیء فعال است، یعنی قادر به دریافت رویدادهای لمس یا کلیک است؛ نادرست اگر زمانی استفاده شود که شیء غیرفعال است.
android:state_activated
بولی. اگر این مورد زمانی استفاده شود که شیء به‌عنوان انتخاب پایدار فعال شده باشد، درست است، مثلاً برای «برجسته کردن» مورد فهرست قبلاً انتخاب‌شده در نمای پیمایش پایدار؛ اگر زمانی استفاده شود که شیء فعال نشده باشد، نادرست است.

در سطح میانای برنامه‌سازی کاربردی ۱۱ معرفی شد.

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" />
همچنین ببینید:

فهرست سطح

یک drawable که تعدادی drawable جایگزین را مدیریت می‌کند، که به هرکدام یک مقدار عددی حداکثر اختصاص داده شده است. تنظیم مقدار سطح ترسیم‌شدنی با 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>
یک drawable را برای استفاده در سطح خاصی تعریف می‌کند.

مشخصه ها:

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 شیء ترسیم‌شدنی‌ای است که می‌تواند بین دو منبع ترسیم‌شدنی دیگر محو تدریجی متقاطع داشته باشد.

هر drawable با یک عنصر <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>
یک drawable را برای استفاده به‌عنوان بخشی از انتقال drawable تعریف می‌کند. باید فرزند عنصر <transition> باشد. عناصر فرزند <bitmap> را می‌پذیرد.

مشخصه ها:

android:drawable
منبع ترسیم‌شدنی. الزامی. ارجاع به منبع ترسیم‌شدنی.
android:id
شناسه منبع. شناسه منبع یکتا برای این drawable. برای ایجاد شناسه منبع جدید برای این مورد، از این فرم استفاده کنید: "@+id/name". علامت به‌علاوه نشان می‌دهد که این شناسه به‌عنوان شناسه جدیدی ایجاد شده است. می‌توانید از این شناسه برای بازیابی و اصلاح کردن drawable با 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 چیدمان، drawable را روی نما اعمال می‌کند:

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

و کد زیر گذار ۵۰۰ میلی‌ثانیه‌ای از مورد اول به مورد دوم را انجام می‌دهد:

کاتلین

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

جاوا

ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
    ((TransitionDrawable) drawable).startTransition(500);
}
همچنین ببینید:

درون‌نشاندنی قابل‌رسم

یک drawable تعریف‌شده در XML که drawable دیگری را با فاصله مشخصی درج می‌کند. این ویژگی زمانی مفید است که یک نما به پس‌زمینه‌ای نیاز دارد که از حدود واقعی نما کوچک‌تر باشد.

مکان فایل:
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" />
همچنین ببینید:

Clip drawable

یک drawable تعریف‌شده در XML که drawable دیگری را براساس سطح فعلی این drawable برش می‌دهد. می‌توانید کنترل کنید که drawable فرزند چقدر در عرض و ارتفاع براساس سطح بریده شود، همچنین می‌توانید جاذبه را کنترل کنید تا مشخص شود در کجای محفظه کلی قرار گیرد. اغلب برای پیاده‌سازی مواردی مثل نوارهای پیشرفت استفاده می‌شود.

مکان فایل:
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" باشد، برش در بالای drawable رخ می‌دهد.
left شیء را در لبه چپ محفظه آن قرار دهید، اندازه آن را تغییر ندهید. این گزینه پیش‌فرض است. وقتی clipOrientation روی "horizontal" باشد، برش در سمت راست drawable اتفاق می‌افتد.
right شیء را در لبه سمت راست محفظه آن قرار دهید، اندازه آن را تغییر ندهید. وقتی clipOrientation "horizontal" باشد، برش در سمت چپ drawable اتفاق می‌افتد.
center_vertical شیء را در مرکز عمودی محفظه آن قرار دهید، اندازه آن را تغییر ندهید. برش دادن مانند زمانی است که جاذبه "center" است.
fill_vertical درصورت نیاز، اندازه عمودی شیء را افزایش دهید تا محفظه خود را کاملاً پر کند. وقتی clipOrientation "vertical" باشد، هیچ برشی رخ نمی‌دهد زیرا drawable فضای عمودی را پر می‌کند (مگر اینکه سطح drawable صفر باشد که در این صورت قابل‌مشاهده نیست).
center_horizontal شیء را در مرکز افقی ظرف آن قرار دهید، اندازه آن را تغییر ندهید. برش دادن مانند زمانی عمل می‌کند که جاذبه "center" است.
fill_horizontal درصورت نیاز، اندازه افقی شیء را افزایش دهید تا محفظه خود را کاملاً پر کند. وقتی clipOrientation برابر با "horizontal" باشد، هیچ برشی رخ نمی‌دهد زیرا drawable فضای افقی را پر می‌کند (مگر اینکه سطح drawable برابر با ۰ باشد که دراین‌صورت قابل‌مشاهده نیست).
center شیء را در مرکز محفظه آن در هر دو محور عمودی و افقی قرار دهید، نه تغییر اندازه آن. وقتی clipOrientation روی "horizontal" باشد، برش در سمت چپ و راست انجام می‌شود. وقتی clipOrientation "vertical" باشد، برش در بالا و پایین انجام می‌شود.
fill درصورت نیاز، اندازه افقی و عمودی شیء را افزایش دهید تا ظرف خود را کاملاً پر کند. هیچ برشی رخ نمی‌دهد زیرا drawable فضای افقی و عمودی را پر می‌کند (مگر اینکه سطح drawable برابر با ۰ باشد که در این صورت قابل‌مشاهده نیست).
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" />

کد زیر drawable را دریافت می‌کند و مقدار برش را افزایش می‌دهد تا تصویر را به‌تدریج آشکار کند:

کاتلین

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

جاوا

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

افزایش سطح، میزان برش را کاهش می‌دهد و به‌تدریج تصویر را آشکار می‌کند. اینجا در سطح ۷۰۰۰ است:

توجه: سطح پیش‌فرض ۰ است که کاملاً برش داده شده است، بنابراین تصویر قابل‌مشاهده نیست. وقتی سطح ۱۰٬۰۰۰ باشد، تصویر برش داده نمی‌شود و کاملاً قابل‌مشاهده است.

همچنین ببینید:

ترسیم‌پذیر مقیاس

یک drawable تعریف‌شده در XML که اندازه drawable دیگری را براساس سطح فعلی آن تغییر می‌دهد.

مکان فایل:
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% است، مثل ۱۰۰٪ یا ۱۲٫۵٪.
android:scaleWidth
درصد. عرض مقیاس، که به‌صورت درصدی از محدوده قابل‌ترسیم بیان می‌شود. قالب مقدار XX% است، مثل ۱۰۰٪ یا ۱۲٫۵٪.
مثال:
<?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"، شعاع داخلی برابر است با عرض حلقه تقسیم بر ۵. این مقدار توسط android:innerRadius لغو شده است. مقدار پیش‌فرض ۹ است.
android:thickness
بعد. ضخامت حلقه، به‌عنوان مقدار بُعد یا منبع بُعد.
android:thicknessRatio
شناور. ضخامت حلقه به‌صورت نسبتی از عرض حلقه بیان می‌شود. برای مثال، اگر android:thicknessRatio="2"، ضخامت برابر است با عرض حلقه تقسیم بر ۲. این مقدار توسط android:innerRadius لغو شده است. مقدار پیش‌فرض ۳ است.
android:useLevel
بولی. اگر از این به‌عنوان LevelListDrawable استفاده شود، درست است. این معمولاً نادرست است، وگرنه ممکن است شکل شما نشان داده نشود.
<corners>
گوشه‌های گرد برای شکل ایجاد می‌کند. فقط زمانی اعمال می‌شود که شکل مستطیل باشد.

مشخصه ها:

android:radius
بعد. شعاع همه گوشه‌ها، به‌عنوان مقدار بُعد یا منبع بُعد. این مورد برای هر گوشه با مشخصه‌های زیر لغو می‌شود.
android:topLeftRadius
بعد. شعاع گوشه بالا سمت راست، به‌عنوان مقدار بُعد یا منبع بُعد.
android:topRightRadius
بعد. شعاع گوشه بالا سمت راست، به‌عنوان مقدار بعد یا منبع بعد.
android:bottomLeftRadius
بعد. شعاع گوشه پایین سمت چپ، به‌عنوان مقدار بُعد یا منبع بُعد.
android:bottomRightRadius
بعد. شعاع گوشه پایین سمت راست، به‌عنوان مقدار بُعد یا منبع بُعد.

توجه: در ابتدا باید برای هر گوشه، شعاع گوشه بزرگ‌تر از ۱ ارائه شود، درغیراین‌صورت هیچ گوشه‌ای گرد نمی‌شود. اگر می‌خواهید گوشه‌های خاصی گرد نشوند، یک راه حل این است که از android:radius برای تنظیم شعاع گوشه پیش‌فرض بزرگ‌تر از ۱ استفاده کنید و سپس هر گوشه را با مقادیری که واقعاً می‌خواهید لغو کنید، و در جایی که نمی‌خواهید گوشه‌های گرد داشته باشید، مقدار ۰ («0dp») را ارائه دهید.

<gradient>
رنگ طیفی را برای شکل مشخص می‌کند.

مشخصه ها:

android:angle
عدد صحیح. زاویه طیف رنگ، به درجه. ‫۰ از چپ به راست است، ۹۰ از پایین به بالا است. باید مضربی از ۴۵ باشد. پیش‌فرض ۰ است.
android:centerX
شناور. موقعیت X نسبی برای مرکز گرادیان (۰ - ۱٫۰).
android:centerY
شناور. موقعیت Y نسبی برای مرکز شیب (۰ - ۱٫۰).
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" />

این کد برنامه، شکل قابل‌رسم را دریافت می‌کند و آن را روی یک نما اعمال می‌کند:

کاتلین

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

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

جاوا

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

TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
همچنین ببینید: