Sumber daya yang dapat digambar

Resource drawable adalah konsep umum untuk grafis yang dapat digambar pada layar dan bisa ditampilkan dengan API seperti getDrawable(int) atau diterapkan ke resource XML lainnya dengan atribut seperti android:drawable dan android:icon. Ada beberapa jenis drawable:

File bitmap
File grafis bitmap (PNG, WEBP, JPG, atau GIF). Membuat BitmapDrawable
File Nine-patch
File PNG dengan wilayah yang dapat direntangkan untuk memungkinkan gambar diubah ukurannya berdasarkan konten (.9.png). Membuat NinePatchDrawable.
Daftar lapisan
Drawable yang mengelola array drawable lainnya. Drawable ini digambar dalam urutan array, sehingga elemen dengan indeks terbesar digambar paling atas. Membuat LayerDrawable.
Daftar status
File XML yang merujuk pada berbagai grafik bitmap untuk berbagai kondisi—misalnya, menggunakan gambar yang berbeda ketika satu tombol diketuk. Membuat StateListDrawable.
Daftar level
File XML yang menentukan drawable yang mengelola sejumlah drawable alternatif, masing-masing disertai nilai numerik maksimum. Membuat LevelListDrawable.
Drawable transisi
File XML yang menentukan drawable yang bisa memudar bersilang antara dua resource drawable. Membuat TransitionDrawable.
Drawable inset
File XML yang menentukan drawable yang menyisipkan drawable lainnya dengan jarak yang telah ditentukan. Hal ini bermanfaat saat tampilan memerlukan drawable latar belakang yang lebih kecil dari ikatan tampilan sesungguhnya.
Drawable klip
File XML yang menentukan drawable yang mengklip drawable lainnya berdasarkan nilai tingkat drawable ini untuk saat ini. Membuat ClipDrawable.
Drawable skala
File XML yang menentukan drawable yang mengubah ukuran drawable lain berdasarkan nilai tingkat saat ini. Membuat ScaleDrawable
Drawable bentuk.
File XML yang menentukan bentuk geometris, termasuk warna dan gradien. Membuat GradientDrawable.

Untuk mengetahui informasi tentang cara membuat AnimationDrawable, lihat dokumen Resource animasi.

Catatan: resource warna juga dapat digunakan sebagai drawable dalam XML. Misalnya, ketika membuat sebuah drawable daftar status, Anda dapat mereferensikan sebuah resource warna untuk atribut android:drawable (android:drawable="@color/green").

Bitmap

Gambar bitmap. Android mendukung file bitmap dalam format berikut: PNG (lebih disukai), WEBP (lebih disukai, memerlukan API level 17 atau yang lebih tinggi), JPG (dapat diterima), GIF (tidak direkomendasikan).

Anda dapat merujuk file bitmap secara langsung, menggunakan nama file sebagai ID resource, atau membuat ID resource alias di XML.

Catatan: File bitmap mungkin dioptimalkan secara otomatis dengan kompresi gambar utuh oleh alat aapt selama proses build. Misalnya, PNG warna asli yang tidak memerlukan lebih dari 256 warna dapat dikonversi menjadi PNG 8 bit dengan palet warna. Cara ini akan menghasilkan gambar dengan kualitas setara yang membutuhkan lebih sedikit memori.

Perhatikan bahwa biner gambar yang terletak dalam direktori ini dapat berubah selama build. Jika Anda berencana membaca gambar sebagai stream bit untuk mengonversinya ke bitmap, taruh gambar dalam folder res/raw/, tempat gambar tidak dioptimalkan.

File bitmap

File bitmap adalah file PNG, WEBP, JPG, atau GIF. Android membuat resource Drawable untuk setiap file ini ketika Anda menyimpannya dalam direktori res/drawable/.

lokasi file:
res/drawable/filename.png (.png, .webp, .jpg, atau .gif)
Nama filenya adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke BitmapDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
contoh:
Dengan gambar disimpan pada res/drawable/myimage.png, XML tata letak ini menerapkan gambar ke tampilan:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

Kode aplikasi berikut mengambil gambar sebagai 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);
lihat juga:

Bitmap XML

Bitmap XML adalah resource yang ditentukan pada XML yang mengarah pada file bitmap. Dampaknya adalah alias untuk file bitmap raw. XML dapat menentukan properti tambahan untuk bitmap seperti dithering dan pemetakan.

Catatan: Anda bisa menggunakan elemen <bitmap> sebagai turunan dari elemen <item>. Misalnya , ketika membuat daftar status atau daftar lapisan, Anda dapat mengecualikan atribut android:drawable dari elemen <item> dan menyarangkan <bitmap> di dalamnya yang menentukan item drawable.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke BitmapDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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"] />
elemen:
<bitmap>
Wajib. Mendefinisikan sumber bitmap dan propertinya.

Atribut:

xmlns:android
String. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android". Hal ini diperlukan hanya jika <bitmap> merupakan elemen root. Hal ini tidak diperlukan saat <bitmap> disusun bertingkat di dalam <item>.
android:src
Resource drawable. Wajib. Rujukan pada resource drawable.
android:antialias
Boolean. Mengaktifkan atau menonaktifkan penggunaan antialias.
android:dither
Boolean. Mengaktifkan atau menonaktifkan dithering pada bitmap jika bitmap tidak memiliki konfigurasi piksel yang sama dengan layar, seperti bitmap ARGB 8888 pada layar RGB 565.
android:filter
Boolean. Mengaktifkan atau menonaktifkan pemfilteran bitmap. Pemfilteran digunakan saat bitmap diciutkan atau dibentangkan untuk memperhalus tampilannya.
android:gravity
Kata kunci. Mendefinisikan gravitasi untuk bitmap. Gravitasi menunjukkan lokasi penempatan drawable dalam container-nya jika bitmap lebih kecil dari container-nya.

Harus berupa satu atau beberapa nilai konstanta berikut, yang dipisahkan dengan |:

NilaiDeskripsi
top Meletakkan objek pada bagian atas container, tanpa mengubah ukurannya.
bottom Meletakkan objek pada bagian bawah container, tanpa mengubah ukurannya.
left Meletakkan objek pada bagian tepi kiri container-nya, tanpa mengubah ukurannya.
right Meletakkan objek pada bagian tepi kanan container-nya, tanpa mengubah ukurannya.
center_vertical Meletakkan objek pada bagian tengah vertikal container-nya, tanpa mengubah ukurannya.
fill_vertical Memperbesar ukuran vertikal objek jika diperlukan sehingga mengisi seluruh container-nya.
center_horizontal Meletakkan objek pada tengah horizontal container-nya, tanpa mengubah ukurannya.
fill_horizontal Memperbesar ukuran horizontal objek jika diperlukan sehingga mengisi seluruh container-nya.
center Meletakkan objek pada tengah container-nya, tepat pada sumbu vertikal dan horizontal, tanpa mengubah ukurannya.
fill Memperbesar ukuran horizontal dan vertikal objek jika diperlukan sehingga mengisi seluruh container-nya. Ini adalah defaultnya.
clip_vertical Opsi tambahan yang dapat ditetapkan supaya tepian bagian atas dan/atau bawah pada turunan diklip sesuai dengan batas container-nya. Klip ini berdasarkan gravitasi vertikal: gravitasi atas mengklip tepi bagian bawah, gravitasi bawah mengklip tepi bagian atas, dan tidak mengklip kedua tepinya.
clip_horizontal Opsi tambahan yang dapat diatur supaya tepian kanan dan/atau kiri pada turunan diklip menyesuaikan dengan batas container-nya. Klip berdasarkan gravitasi horizontal: gravitasi kiri mengklip tepi bagian kanan, gravitasi kanan mengklip tepi bagian kiri, dan tidak mengklip kedua tepinya.
android:mipMap
Boolean. Mengaktifkan atau menonaktifkan petunjuk mipmap. Baca setHasMipMap() untuk mengetahui informasi selengkapnya. Nilai defaultnya adalah false.
android:tileMode
Kata kunci. Mendefinisikan mode kotak. Bila mode kotak diaktifkan, bitmap akan diulang. Gravitasi akan diabaikan bila mode kotak diaktifkan.

Harus salah satu dari nilai konstanta berikut ini:

NilaiDeskripsi
disabled Jangan mengotakkan bitmap. Nilai ini merupakan default.
clamp Duplikasikan warna tepi jika shader melenceng keluar dari batas aslinya
repeat Ulangi gambar shader secara horizontal dan vertikal.
mirror Ulangi gambar shader secara horizontal dan vertikal, saling mencerminkan gambar sehingga gambar di sebelahnya selalu mulus.
contoh:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
lihat juga:

Nine-patch

NinePatch adalah gambar PNG tempat Anda bisa menentukan area yang dapat direntangkan yang diskalakan Android ketika isi dalam tampilan melebihi batas gambar normal. Anda biasanya menetapkan gambar jenis ini sebagai latar belakang tampilan yang setidaknya memiliki satu dimensi yang disetel ke "wrap_content".

Saat tampilan diperluas untuk mengakomodasi konten, gambar nine-patch juga diskalakan agar sesuai dengan ukuran tampilan. Contoh penggunaan gambar nine-patch adalah latar belakang yang digunakan oleh widget Button standar Android, yang harus membentang guna mengakomodasi teks (atau gambar) di dalam tombol.

Sama dengan bitmap biasa, Anda dapat merujuk file nine-patch secara langsung dari resource yang ditentukan oleh XML.

Untuk pembahasan lengkap mengenai cara membuat file nine-patch dengan area yang dapat direntangkan, lihat Membuat bitmap yang dapat diubah ukurannya (file 9-patch).

File Nine-patch

lokasi file:
res/drawable/filename.9.png
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke NinePatchDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
contoh:
Dengan gambar disimpan pada res/drawable/myninepatch.9.png, XML tata letak ini menerapkan nine-patch ke tampilan:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
lihat juga:

Nine-patch XML

Nine-patch XML adalah resource yang didefinisikan dalam XML yang menunjuk ke file nine-patch. XML dapat menetapkan dithering untuk gambar.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke NinePatchDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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"] />
elemen:
<nine-patch>
Wajib. Menentukan sumber nine-patch dan propertinya.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
android:src
Resource drawable. Wajib. Rujukan ke file nine-patch.
android:dither
Boolean. Mengaktifkan atau menonaktifkan dithering pada bitmap jika bitmap tidak memiliki konfigurasi piksel yang sama dengan layar, seperti bitmap ARGB 8888 pada layar RGB 565.
contoh:
<?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" />

Daftar lapisan

LayerDrawable adalah objek drawable yang mengelola serangkaian drawable lainnya. Setiap drawable yang ada dalam daftar akan digambar sesuai urutan daftar. Drawable terakhir dalam daftar akan digambar di bagian atas.

Masing-masing drawable ditunjukkan dengan elemen <item> di dalam elemen <layer-list> tunggal.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke LayerDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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>
elemen:
<layer-list>
Wajib. Elemen ini harus menjadi elemen root. Berisi satu atau beberapa elemen <item>.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
<item>
Menetapkan drawable ke lokasi di drawable lapisan, pada posisi yang ditetapkan dengan atributnya. Harus berupa turunan dari elemen <layer-list>. Menerima elemen <bitmap> turunan.

Atribut:

android:drawable
Resource drawable. Wajib. Rujukan pada resource drawable.
android:id
ID Resource. ID resource unik untuk drawable ini. Untuk membuat ID resource baru bagi item ini, gunakan bentuk: "@+id/name". Simbol plus menunjukkan bahwa ID ini dibuat sebagai ID baru. Anda dapat menggunakan ID ini untuk mengambil dan memodifikasi drawable dengan View.findViewById() atau Activity.findViewById().
android:top
Dimensi. Offset atas, sebagai nilai dimensi atau resource dimensi.
android:right
Dimensi. Offset kanan, sebagai nilai dimensi atau resource dimensi.
android:bottom
Dimensi. Offset bawah, sebagai nilai dimensi atau resource dimensi.
android:left
Dimensi. Offset kiri, sebagai nilai dimensi atau resource dimensi.

Semua item drawable diskalakan agar sesuai dengan ukuran tampilan yang menampungnya, secara default. Oleh karena itu, menempatkan gambar pada daftar lapisan pada berbagai posisi dapat meningkatkan ukuran tampilan dan beberapa gambar menskalakan sebagaimana mestinya.

Untuk menghindari penskalaan item dalam daftar, gunakan elemen <bitmap> di dalam elemen <item> untuk menentukan drawable dan menetapkan gravitasi dengan sesuatu yang skalanya tetap, misalnya "center". Misalnya, <item> berikut menentukan sebuah item yang di skalakan agar masuk ke tampilan container-nya:

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

Guna menghindari penskalaan, contoh berikut menggunakan elemen <bitmap> dengan gravitasi terpusat:

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
contoh:
File XML yang disimpan di 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>

Contoh ini menggunakan elemen <bitmap> yang disusun bertingkat untuk menentukan resource drawable untuk setiap item dengan gravitasi "center". Untuk memastikan bahwa tidak satupun gambar diskalakan untuk sesuai dengan ukuran container, dikarenakan pengubahan ukuran yang terjadi oleh gambar offset.

XML tata letak ini menerapkan drawable ke tampilan:

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

Hasilnya adalah tumpukan gambar offset yang meningkat:

lihat juga:

Daftar status

StateListDrawable adalah objek drawable yang ditentukan pada XML menggunakan beberapa gambar untuk menampilkan grafis yang sama, bergantung pada status objek. Misalnya, status widget Button dapat diketuk, difokuskan, atau tidak keduanya. Dengan menggunakan drawable daftar status, Anda dapat memberikan gambar latar yang berbeda untuk setiap status.

Anda bisa menjelaskan daftar keadaan dalam file XML. Setiap grafis ditunjukkan dengan elemen <item> di dalam elemen <selector> tunggal. Setiap <item> menggunakan berbagai atribut untuk menjelaskan status tempatnya digunakan sebagai grafis untuk drawable.

Pada setiap perubahan status, daftar status akan ditelusuri dari atas ke bawah, dan item pertama yang cocok dengan status saat ini akan digunakan. Pilihan ini tidak didasarkan pada "kecocokan terbaik", melainkan item pertama yang memenuhi kriteria minimum status.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke StateListDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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>
elemen:
<selector>
Wajib. Elemen ini harus menjadi elemen root. Berisi satu atau beberapa elemen <item>.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
android:constantSize
Boolean. Benar jika ukuran internal drawable yang dilaporkan tetap konstan saat status berubah (ukuran maksimum untuk semua status); salah jika ukurannya bervariasi berdasarkan status saat ini. Default-nya adalah salah.
android:dither
Boolean. Benar untuk mengaktifkan dithering pada bitmap jika bitmap tidak memiliki konfigurasi piksel yang sama dengan layar, seperti bitmap ARGB 8888 pada layar RGB 565; salah untuk menonaktifkan dithering. Nilai defaultnya adalah benar (true).
android:variablePadding
Boolean. Benar jika padding drawable berubah berdasarkan status saat ini yang dipilih; salah jika padding harus tetap sama, berdasarkan padding maksimum dari semua status. Mengaktifkan fitur ini mengharuskan Anda mengatur tata letak saat status berubah, yang sering kali tidak didukung. Default-nya adalah salah.
<item>
Mendefinisikan drawable yang akan digunakan selama status tertentu, seperti yang dijelaskan oleh atributnya. Harus merupakan turunan dari elemen <selector>.

Atribut:

android:drawable
Resource drawable. Wajib. Rujukan pada resource drawable.
android:state_pressed
Boolean. Benar jika item ini digunakan saat objek diketuk, seperti saat tombol disentuh; salah jika item ini digunakan dalam status default, tidak diketuk.
android:state_focused
Boolean. Benar jika item ini digunakan saat objek memiliki fokus input, seperti saat pengguna memilih input teks; salah jika item ini digunakan dalam status default, tidak difokuskan.
android:state_hovered
Boolean. Benar jika item ini digunakan saat kursor diarahkan ke objek; salah jika item ini digunakan dalam status default, tanpa kursor. Sering kali, drawable ini dapat berupa drawable yang sama dengan yang digunakan untuk status "fokus".

Diperkenalkan dalam API level 14.

android:state_selected
Boolean. Benar jika item ini digunakan saat objek adalah pilihan pengguna saat ini ketika menavigasi dengan kontrol arah, seperti saat menavigasi daftar dengan D-pad; salah jika item ini digunakan saat objek tidak dipilih.

Status yang dipilih digunakan jika android:state_focused tidak mencukupi, seperti saat tampilan daftar memiliki fokus dan item di dalamnya dipilih dengan D-pad.

android:state_checkable
Boolean. Benar jika item ini digunakan saat objek dapat dipilih; salah jika item ini digunakan saat objek tidak dapat dipilih. Hanya berguna jika objek dapat beralih antara widget yang dapat dipilih dan yang tidak dapat dipilih.
android:state_checked
Boolean. Benar jika item ini digunakan saat objek dipilih; salah jika digunakan saat objek dibatalkan pilihannya.
android:state_enabled
Boolean. Benar jika item ini digunakan saat objek diaktifkan, yang berarti mampu menerima peristiwa sentuh atau klik; salah jika digunakan saat objek dinonaktifkan.
android:state_activated
Boolean. Benar jika item ini digunakan saat objek diaktifkan sebagai pilihan persisten, seperti untuk "menyorot" item daftar yang dipilih sebelumnya dalam tampilan navigasi persisten; salah jika digunakan saat objek tidak diaktifkan.

Diperkenalkan dalam API level 11.

android:state_window_focused
Boolean. Benar jika item ini digunakan saat jendela aplikasi sedang difokuskan, artinya aplikasi berada di latar depan; salah jika item ini digunakan saat jendela aplikasi tidak sedang difokuskan, misalnya, jika menu notifikasi ditarik ke bawah atau dialog muncul.

Catatan: Android menerapkan item pertama dalam daftar status yang sesuai dengan status objek saat ini. Jadi, jika item pertama dalam daftar tidak berisi atribut status sebelumnya, item tersebut akan diterapkan setiap saat. Inilah sebabnya Anda ingin nilai default selalu menjadi yang terakhir, seperti ditunjukkan dalam contoh berikut.

contoh:
File XML yang disimpan di 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 tata letak ini menerapkan drawable daftar status untuk tombol:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
lihat juga:

Daftar level

Drawable yang mengelola sejumlah drawable alternatif, masing-masing diberikan nilai numerik maksimum. Menyetel nilai tingkat drawable dengan setLevel() memuat resource drawable dalam daftar nilai tingkat yang memiliki nilai android:maxLevel lebih besar dari atau sama dengan nilai yang diteruskan ke metode.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke LevelListDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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>
elemen:
<level-list>
Wajib. Elemen ini harus menjadi elemen root. Berisi satu atau beberapa elemen <item>.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
<item>
Menentukan drawable yang digunakan di tingkat tertentu.

Atribut:

android:drawable
Resource drawable. Wajib. Merujuk ke resource drawable yang akan di-inset.
android:maxLevel
Bilangan bulat. Tingkat maksimum yang diizinkan untuk item ini.
android:minLevel
Bilangan bulat. Tingkat minimum yang diizinkan untuk item ini.
contoh:
<?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>

Setelah ini diterapkan ke View, tingkatnya dapat diubah dengan setLevel() atau setImageLevel().

lihat juga:

Drawable transisi

TransitionDrawable adalah objek drawable yang bisa berjalan secara memudar bersilang antara dua resource drawable lainnya.

Masing-masing drawable ditunjukkan dengan elemen <item> di dalam elemen <transition> tunggal. Tidak lebih dari dua item yang didukung. Untuk transisi maju, panggil startTransition(). Untuk transisi mundur, panggil reverseTransition().

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke TransitionDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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>
elemen:
<transition>
Wajib. Elemen ini harus menjadi elemen root. Berisi satu atau beberapa elemen <item>.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
<item>
Tentukan drawable untuk digunakan sebagai bagian dari transisi drawable. Harus berupa turunan dari elemen <transition>. Menerima elemen <bitmap> turunan.

Atribut:

android:drawable
Resource drawable. Wajib. Rujukan pada resource drawable.
android:id
ID Resource. ID resource unik untuk drawable ini. Untuk membuat ID resource baru bagi item ini, gunakan bentuk: "@+id/name". Simbol plus menunjukkan bahwa ID ini dibuat sebagai ID baru. Anda dapat menggunakan ID ini untuk mengambil dan memodifikasi drawable dengan View.findViewById() atau Activity.findViewById().
android:top
Bilangan bulat. Offset atas dalam piksel.
android:right
Bilangan bulat. Offset kanan dalam piksel.
android:bottom
Bilangan bulat. Offset bawah dalam piksel.
android:left
Bilangan bulat. Offset kiri dalam piksel.
contoh:
File XML yang disimpan di 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 tata letak ini menerapkan drawable ke tampilan:

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

Dan kode berikut ini menunjukkan transisi 500 md dari item pertama ke yang kedua:

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);
}
lihat juga:

Drawable inset

Drawable yang didefinisikan dalam XML yang menyisipkan drawable lainnya dengan jarak tertentu. Hal ini bermanfaat saat tampilan memerlukan latar belakang yang lebih kecil dari ikatan tampilan sesungguhnya.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke InsetDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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" />
elemen:
<inset>
Wajib. Menentukan yang dapat digambar sisipan. Elemen ini harus menjadi elemen root.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
android:drawable
Resource drawable. Wajib. Merujuk ke resource drawable yang akan di-inset.
android:insetTop
Dimensi. Inset atas, sebagai nilai dimensi atau resource dimensi.
android:insetRight
Dimensi. Inset kanan, sebagai nilai dimensi atau resource dimensi.
android:insetBottom
Dimensi. Inset bawah, sebagai nilai dimensi atau resource dimensi.
android:insetLeft
Dimensi. Inset kiri, sebagai nilai dimensi atau resource dimensi.
contoh:
<?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" />
lihat juga:

Drawable klip

Drawable yang ditentukan dalam XML yang mengklip drawable lain berdasarkan tingkat drawable ini untuk saat ini. Anda dapat mengontrol seberapa banyak drawable turunan yang diklip dengan lebar dan tinggi berdasarkan tingkatnya, serta gravitasi untuk mengontrol lokasinya dalam keseluruhan container. Yang paling sering digunakan untuk menjalankan sesuatu seperti status progres.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke ClipDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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"] />
elemen:
<clip>
Wajib. Mendefinisikan drawable klip. Elemen ini harus menjadi elemen root.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
android:drawable
Resource drawable. Wajib. Merujuk ke resource drawable yang akan diklip.
android:clipOrientation
Kata kunci. Orientasi untuk klip.

Harus salah satu dari nilai konstanta berikut ini:

NilaiDeskripsi
horizontal Mengklip drawable secara horizontal.
vertical Mengklip drawable secara vertikal.
android:gravity
Kata kunci. Menentukan lokasi drawable yang akan diklip.

Harus berupa satu atau beberapa nilai konstanta berikut, yang dipisahkan dengan |:

NilaiDeskripsi
top Meletakkan objek pada bagian atas container, tanpa mengubah ukurannya. Bila clipOrientation adalah "vertical", pengeklipan akan terjadi di bagian bawah drawable.
bottom Meletakkan objek pada bagian bawah container, tanpa mengubah ukurannya. Bila clipOrientation adalah "vertical", pengeklipan akan terjadi di bagian atas drawable.
left Meletakkan objek pada bagian tepi kiri container-nya, tanpa mengubah ukurannya. Ini adalah defaultnya. Bila clipOrientation adalah "horizontal", pengeklipan akan terjadi di bagian kanan drawable.
right Meletakkan objek pada bagian tepi kanan container-nya, tanpa mengubah ukurannya. Bila clipOrientation adalah "horizontal", pengeklipan akan terjadi di bagian kiri drawable.
center_vertical Meletakkan objek pada bagian tengah vertikal container-nya, tanpa mengubah ukurannya. Pengeklipan berfungsi seperti bila gravitasi adalah "center".
fill_vertical Memperbesar ukuran vertikal objek jika diperlukan sehingga mengisi seluruh container-nya. Bila clipOrientation adalah "vertical", pengeklipan tidak akan terjadi karena drawable mengisi ruang vertikal (kecuali jika tingkatnya adalah 0, dalam hal ini tidak terlihat).
center_horizontal Meletakkan objek pada bagian tengah horizontal container-nya, tanpa mengubah ukurannya. Pengeklipan berfungsi seperti bila gravitasi adalah "center".
fill_horizontal Memperbesar ukuran horizontal objek jika diperlukan sehingga mengisi seluruh container-nya. Bila clipOrientation adalah "horizontal", pengeklipan tidak akan terjadi karena drawable mengisi ruang horizontal (kecuali jika tingkatnya adalah 0, dalam hal ini tidak terlihat).
center Meletakkan objek pada tengah container-nya, tepat pada sumbu vertikal dan horizontal, tanpa mengubah ukurannya. Bila clipOrientation adalah "horizontal", pengeklipan tidak akan terjadi di bagian kanan dan kiri. Bila clipOrientation adalah "vertical", pengeklipan tidak akan terjadi di bagian atas dan bawah.
fill Memperbesar ukuran horizontal dan vertikal objek jika diperlukan sehingga mengisi seluruh container-nya. Pengeklipan tidak terjadi karena drawable mengisi ruang horizontal dan vertikal (kecuali jika tingkat drawable-nya adalah 0, dalam hal ini tidak terlihat).
clip_vertical Opsi tambahan yang dapat ditetapkan supaya tepian bagian atas dan/atau bawah pada turunan diklip sesuai dengan batas container-nya. Klip ini berdasarkan gravitasi vertikal: gravitasi atas mengklip tepi bagian bawah, gravitasi bawah mengklip tepi bagian atas, dan tidak mengklip kedua tepinya.
clip_horizontal Opsi tambahan yang dapat diatur supaya tepian kanan dan/atau kiri pada turunan diklip menyesuaikan dengan batas container-nya. Klip berdasarkan gravitasi horizontal: gravitasi kiri mengklip tepi bagian kanan, gravitasi kanan mengklip tepi bagian kiri, dan tidak mengklip kedua tepinya.
contoh:
File XML yang disimpan di 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 tata letak berikut menerapkan klip drawable ke tampilan:

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

Kode berikut mendapatkan drawable dan meningkatkan jumlah klip untuk berangsur-angsur memunculkan gambar:

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

Meningkatkan level ini akan mengurangi jumlah klip dan perlahan-lahan memunculkan gambar. Ini pada tingkat 7000:

Catatan: Tingkat default-nya adalah 0, yang sepenuhnya diklip sehingga gambar tidak terlihat. Jika tingkatnya 10.000, gambar tidak diklip dan terlihat seluruhnya.

lihat juga:

Drawable skala

Drawable yang didefinisikan dalam XML yang mengubah ukuran drawable lainnya berdasarkan tingkat saat ini.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke ScaleDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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" />
elemen:
<scale>
Wajib. Mendefinisikan drawable skala. Elemen ini harus menjadi elemen root.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
android:drawable
Resource drawable. Wajib. Rujukan pada resource drawable.
android:scaleGravity
Kata kunci. Menentukan posisi gravitasi setelah penskalaan.

Harus berupa satu atau beberapa nilai konstanta berikut, yang dipisahkan dengan |:

NilaiDeskripsi
top Meletakkan objek pada bagian atas container, tanpa mengubah ukurannya.
bottom Meletakkan objek pada bagian bawah container, tanpa mengubah ukurannya.
left Meletakkan objek pada bagian tepi kiri container-nya, tanpa mengubah ukurannya. Ini adalah defaultnya.
right Meletakkan objek pada bagian tepi kanan container-nya, tanpa mengubah ukurannya.
center_vertical Meletakkan objek pada bagian tengah vertikal container-nya, tanpa mengubah ukurannya.
fill_vertical Memperbesar ukuran vertikal objek jika diperlukan sehingga mengisi seluruh container-nya.
center_horizontal Meletakkan objek pada bagian tengah horizontal container-nya, tanpa mengubah ukurannya.
fill_horizontal Memperbesar ukuran horizontal objek jika diperlukan sehingga mengisi seluruh container-nya.
center Meletakkan objek pada tengah container-nya, tepat pada sumbu vertikal dan horizontal, tanpa mengubah ukurannya.
fill Memperbesar ukuran horizontal dan vertikal objek jika diperlukan sehingga mengisi seluruh container-nya.
clip_vertical Opsi tambahan yang dapat ditetapkan supaya tepian bagian atas dan/atau bawah pada turunan diklip sesuai dengan batas container-nya. Klip ini berdasarkan gravitasi vertikal: gravitasi atas mengklip tepi bagian bawah, gravitasi bawah mengklip tepi bagian atas, dan tidak mengklip kedua tepinya.
clip_horizontal Opsi tambahan yang dapat diatur supaya tepian kanan dan/atau kiri pada turunan diklip menyesuaikan dengan batas container-nya. Klip berdasarkan gravitasi horizontal: gravitasi kiri mengklip tepi bagian kanan, gravitasi kanan mengklip tepi bagian kiri, dan tidak mengklip kedua tepinya.
android:scaleHeight
Persentase. Ketinggian skala, dinyatakan sebagai persentase dari batas drawable. Format nilai adalah XX%, seperti 100% atau 12,5%.
android:scaleWidth
Persentase. Lebar skala, dinyatakan sebagai persentase dari batas drawable. Format nilai adalah XX%, seperti 100% atau 12,5%.
contoh:
<?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%" />
lihat juga:

Drawable bentuk

Ini adalah bentuk umum yang didefinisikan dalam XML.

lokasi file:
res/drawable/filename.xml
Nama file adalah ID resource
jenis data resource yang dihimpun:
Pointer resource ke GradientDrawable
referensi resource:
Di Java: R.drawable.filename
Dalam XML: @[package:]drawable/filename
sintaksis:
<?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>
elemen:
<shape>
Wajib. Drawable bentuk. Elemen ini harus menjadi elemen root.

Atribut:

xmlns:android
String. Wajib. Menentukan namespace XML, yang harus ditetapkan seperti berikut "http://schemas.android.com/apk/res/android".
android:shape
Kata kunci. Mendefinisikan jenis bentuk. Nilai yang valid adalah:
NilaiDeskripsi
"rectangle" Sebuah persegi panjang yang mengisi tampilan yang memuatnya. Ini adalah bentuk defaultnya.
"oval" Bentuk oval yang sesuai dengan dimensi tampilan yang memuatnya.
"line" Sebuah garis horizontal yang membentang selebar tampilan yang memuatnya. Bentuk ini memerlukan elemen <stroke> untuk mendefinisikan lebar garis.
"ring" Bentuk cincin.

Atribut berikut hanya digunakan saat android:shape="ring":

android:innerRadius
Dimensi. Radius untuk bagian dalam cincin (lubang di tengah), sebagai nilai dimensi atau resource dimensi.
android:innerRadiusRatio
Float. Radius untuk bagian dalam cincin, dinyatakan sebagai rasio lebar cincin. Misalnya, jika android:innerRadiusRatio="5", radius dalam sama dengan lebar cincin dibagi 5. Nilai ini diganti oleh android:innerRadius. Nilai default-nya adalah 9.
android:thickness
Dimensi. Ketebalan cincin, sebagai nilai dimensi atau resource dimensi.
android:thicknessRatio
Float. Ketebalan cincin, dinyatakan sebagai rasio dari lebar cincin. Misalnya, jika android:thicknessRatio="2", maka ketebalan cincin sama dengan lebar cincin dibagi 2. Nilai ini diganti oleh android:innerRadius. Nilai default-nya adalah 3.
android:useLevel
Boolean. Benar jika digunakan sebagai LevelListDrawable. Nilai ini biasanya salah, atau bentuk Anda mungkin tidak muncul.
<corners>
Membuat bentuk sudut lengkung. Berlaku hanya bila bentuknya persegi panjang.

Atribut:

android:radius
Dimensi. Radius untuk semua sudut, sebagai nilai dimensi atau resource dimensi. Ini mengganti tiap sudut dari atribut berikut.
android:topLeftRadius
Dimensi. Radius untuk sudut kiri atas, sebagai nilai dimensi atau resource dimensi.
android:topRightRadius
Dimensi. Radius untuk sudut kanan atas, sebagai nilai dimensi atau resource dimensi.
android:bottomLeftRadius
Dimensi. Radius untuk sudut kiri bawah, sebagai nilai dimensi atau resource dimensi.
android:bottomRightRadius
Dimensi. Radius untuk sudut kanan bawah, sebagai nilai dimensi atau resource dimensi.

Catatan: Awalnya, setiap sudut harus diberikan radius sudut lebih besar dari 1, atau sudut tidak akan melengkung. Jika Anda ingin sudut tertentu agar tidak melengkung, solusinya adalah menggunakan android:radius untuk menyetel radius sudut default lebih dari 1, lalu ganti setiap sudut dengan nilai yang benar-benar Anda inginkan, dengan memberikan 0 ("0dp") di tempat Anda tidak menginginkan sudut yang melengkung.

<gradient>
Menentukan warna gradien untuk bentuk.

Atribut:

android:angle
Bilangan bulat. Sudut untuk gradien, dalam derajat. 0 dari kiri ke kanan, 90 dari bawah ke atas. Harus kelipatan dari 45. Defaultnya adalah 0.
android:centerX
Float. Posisi X relatif untuk pusat gradien (0 - 1.0).
android:centerY
Float. Posisi Y relatif untuk pusat gradien (0 - 1.0).
android:centerColor
Warna. Warna opsional yang muncul di antara warna awal dan akhir, setelah nilai heksadesimal atau resource warna.
android:endColor
Warna. Warna akhir, sebagai nilai heksadesimal atau resource warna.
android:gradientRadius
Float. Radius untuk gradien. Hanya diterapkan bila android:type="radial".
android:startColor
Warna. Warna awal, sebagai nilai heksadesimal atau resource warna.
android:type
Kata kunci. Jenis pola gradien yang akan diterapkan. Nilai yang valid adalah:
NilaiDeskripsi
"linear" Gradien linear. Ini adalah defaultnya.
"radial" Gradien radial. Warna awal adalah warna tengah.
"sweep" Gradien garis bentang.
android:useLevel
Boolean. Benar jika digunakan sebagai LevelListDrawable.
<padding>
Padding untuk diterapkan ke elemen tampilan yang memuatnya. Ini akan menjadi pad untuk posisi konten tampilan, bukan bentuk.

Atribut:

android:left
Dimensi. Padding kiri, sebagai nilai dimensi atau resource dimensi.
android:top
Dimensi. Padding atas, sebagai nilai dimensi atau resource dimensi.
android:right
Dimensi. Padding kanan, sebagai nilai dimensi atau resource dimensi.
android:bottom
Dimensi. Padding bawah, sebagai nilai dimensi atau resource dimensi.
<size>
Ukuran bentuk.

Atribut:

android:height
Dimensi. Ketinggian bentuk, sebagai nilai dimensi atau resource dimensi.
android:width
Dimensi. Lebar bentuk, sebagai nilai dimensi atau resource dimensi.

Catatan: Secara default, bentuknya diskalakan ke ukuran tampilan container yang sesuai dengan dimensi yang ditentukan di sini. Bila Anda menggunakan bentuk di ImageView, Anda dapat membatasi penskalaan dengan menyetel android:scaleType ke "center".

<solid>
Warna solid untuk mengisi bentuk.

Atribut:

android:color
Warna. Warna yang diterapkan ke bentuk, sebagai nilai heksadesimal atau resource warna.
<stroke>
Garis guratan untuk bentuk.

Atribut:

android:width
Dimensi. Ketebalan garis, sebagai nilai dimensi atau resource dimensi.
android:color
Warna. Warna garis, sebagai nilai heksadesimal atau resource warna.
android:dashGap
Dimensi. Jarak antara garis putus-putus, sebagai nilai dimensi atau resource dimensi. Hanya berlaku jika android:dashWidth disetel.
android:dashWidth
Dimensi. Ukuran setiap garis putus-putus, sebagai nilai dimensi atau resource dimensi. Hanya berlaku jika android:dashGap disetel.
contoh:
File XML yang disimpan di 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 tata letak ini menggunakan drawable bentuk ke tampilan:

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

Kode aplikasi ini membuat drawable bentuk dan menerapkannya ke tampilan:

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);
lihat juga: