منابع قابل ترسیم

یک منبع قابل ترسیم یک مفهوم کلی برای یک گرافیک است که می‌توان آن را روی صفحه نمایش کشید و می‌توانید آن را با APIهایی مانند 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" ) ارجاع دهید.

بیت مپ

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

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

توجه: فایل‌های بیت مپ ممکن است به طور خودکار با فشرده‌سازی تصویر بدون تلفات توسط ابزار aapt در طول فرآیند ساخت بهینه شوند. به عنوان مثال، یک PNG با رنگ واقعی که به بیش از 256 رنگ نیاز ندارد، ممکن است به یک PNG 8 بیتی با یک پالت رنگ تبدیل شود. این منجر به تصویری با کیفیت برابر می شود که به حافظه کمتری نیاز دارد.

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

فایل بیت مپ

یک فایل بیت مپ یک فایل PNG، WEBP، JPG یا GIF است. زمانی که آن ها را در دایرکتوری res/drawable/ ذخیره می کنید، اندروید یک منبع Drawable برای هر یک از این فایل ها ایجاد می کند.

محل فایل:
res/drawable/ filename .png ( .png ، .webp ، .jpg . یا .gif )
نام فایل شناسه منبع است
نوع داده منبع کامپایل شده:
اشاره گر منبع به BitmapDrawable
مرجع منبع:
در جاوا: 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 می تواند ویژگی های اضافی را برای بیت مپ مشخص کند، مانند dithering و tiling.

توجه: می توانید از عنصر <bitmap> به عنوان فرزند عنصر <item> استفاده کنید. به عنوان مثال، هنگام ایجاد یک لیست وضعیت یا لیست لایه ، می توانید ویژگی android:drawable از عنصر <item> حذف کنید و یک <bitmap> را در داخل آن قرار دهید که آیتم قابل ترسیم را تعریف می کند.

محل فایل:
res/drawable/ filename .xml
نام فایل شناسه منبع است
نوع داده منبع کامپایل شده:
اشاره گر منبع به BitmapDrawable
مرجع منبع:
در جاوا: 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
بولی . Antialiasing را فعال یا غیرفعال می کند.
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" />
همچنین ببینید:

نه پچ

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

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

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

برای یک بحث کامل در مورد نحوه ایجاد یک فایل نه وصله با مناطق قابل کشش، به ایجاد بیت مپ های قابل تغییر اندازه (فایل های 9 پچ) مراجعه کنید.

فایل نه پچ

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

XML نه پچ

یک XML nine-patch یک منبع تعریف شده در XML است که به یک فایل 9 Patch اشاره می کند. XML می تواند دیترینگ را برای تصویر مشخص کند.

محل فایل:
res/drawable/ filename .xml
نام فایل شناسه منبع است
نوع داده منبع کامپایل شده:
اشاره گر منبع به یک NinePatchDrawable
مرجع منبع:
در جاوا: 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
مرجع منبع:
در جاوا: 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 را برای قرار دادن در لایه قابل ترسیم، در موقعیتی که با ویژگی های آن تعریف شده است، تعریف می کند. باید فرزند عنصر <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، قابل ترسیم را روی یک view اعمال می‌کند:

<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
مرجع منبع:
در جاوا: 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، برای فعال کردن تداخل در نقشه بیت درست است. false برای غیرفعال کردن dithering. پیش فرض درست است.
android:variablePadding
بولی . درست است اگر بالشتک ترسیمی بر اساس وضعیت فعلی انتخاب شده تغییر کند. false اگر بالشتک باید ثابت بماند، بر اساس حداکثر padding همه حالت ها. فعال کردن این ویژگی مستلزم آن است که هنگام تغییر وضعیت، با اجرای طرح‌بندی سروکار داشته باشید، که اغلب پشتیبانی نمی‌شود. پیش فرض نادرست است.
<item>
یک قابل ترسیم را برای استفاده در حالت های خاص تعریف می کند، همانطور که با ویژگی های آن توضیح داده شده است. باید فرزند عنصر <selector> باشد.

ویژگی ها:

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

در سطح 14 API معرفی شده است.

android:state_selected
بولی . درست است اگر در هنگام پیمایش با یک کنترل جهت‌دار، از این مورد زمانی که شی مورد نظر کاربر فعلی است، استفاده می‌شود، مانند هنگام پیمایش در فهرست با D-pad. اگر این مورد زمانی که شی انتخاب نشده است استفاده شود false است.

حالت انتخاب شده زمانی استفاده می‌شود که android:state_focused کافی نباشد، مانند زمانی که نمای فهرست فوکوس داشته باشد و یک مورد درون آن با D-pad انتخاب شود.

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

در سطح 11 API معرفی شده است.

android:state_window_focused
بولی . درست است اگر این مورد زمانی استفاده شود که پنجره برنامه فوکوس داشته باشد، به این معنی که برنامه در پیش زمینه است. اگر از این مورد زمانی استفاده شود که پنجره برنامه فوکوس ندارد، برای مثال، اگر سایه اعلان پایین کشیده شود یا یک گفتگو ظاهر شود، false است.

توجه: اندروید اولین مورد را در لیست وضعیت اعمال می کند که با وضعیت فعلی شی مطابقت دارد. بنابراین، اگر اولین مورد در لیست هیچ یک از ویژگی های حالت قبلی را نداشته باشد، هر بار اعمال می شود. به همین دلیل است که می خواهید مقدار پیش فرض شما همیشه آخرین باشد، همانطور که در مثال زیر نشان داده شده است.

مثال:
فایل 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 با setLevel() منبع قابل ترسیم را در لیست سطح بارگذاری می کند که دارای مقدار android:maxLevel بزرگتر یا مساوی با مقدار ارسال شده به متد است.

محل فایل:
res/drawable/ filename .xml
نام فایل شناسه منبع است
نوع داده منبع کامپایل شده:
اشاره گر منبع به یک LevelListDrawable
مرجع منبع:
در جاوا: 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
مرجع منبع:
در جاوا: 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، قابل ترسیم را روی یک view اعمال می‌کند:

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

و کد زیر یک انتقال 500 میلی‌ثانیه از مورد اول به مورد دوم را انجام می‌دهد:

کاتلین

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);
}
همچنین ببینید:

قابل ترسیم درونی

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

محل فایل:
res/drawable/ filename .xml
نام فایل شناسه منبع است
نوع داده منبع کامپایل شده:
اشاره گر منبع به یک InsetDrawable
مرجع منبع:
در جاوا: 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>
مورد نیاز. 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
مرجع منبع:
در جاوا: 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 زیر، کلیپ قابل ترسیم را روی یک View اعمال می‌کند:

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

کد زیر قابل ترسیم را دریافت می کند و مقدار برش را افزایش می دهد تا به تدریج تصویر نمایان شود:

کاتلین

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);
}

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

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

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

قابل ترسیم مقیاس

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

محل فایل:
res/drawable/ filename .xml
نام فایل شناسه منبع است
نوع داده منبع کامپایل شده:
اشاره گر منبع به ScaleDrawable
مرجع منبع:
در جاوا: 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
مرجع منبع:
در جاوا: 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>
پد برای اعمال به عنصر view حاوی. با این کار موقعیت محتوای مشاهده، نه شکل، پدیدار می شود.

ویژگی ها:

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 شکل قابل ترسیم را در یک view اعمال می کند:

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

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

کاتلین

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