Menyediakan Sumber Daya untuk Layout Adaptif
Daftar Isi:
- Pengantar
- Mengeksternalkan sumber daya
- Mengelompokkan sumber daya
- Sumber daya alternatif
- Membuat sumber daya alternatif
- Qualifier sumber daya alternatif umum
- Menyediakan sumber daya default
- Praktik terkait
- Ketahui selengkapnya
Layout adaptif adalah layout yang bekerja dengan baik pada berbagai orientasi dan ukuran layar, berbagai perangkat, berbagai lokal dan bahasa, serta sebagai versi Android.
Dalam bab ini Anda akan mempelajari cara membuat layout adaptif dengan mengeksternalkan dan mengelompokkan sumber daya, menyediakan sumber daya alternatif, dan menyediakan sumber daya default dalam aplikasi.
Mengeksternalkan sumber daya
Saat mengeksternalkan sumber daya, Anda harus memisahkannya dari kode aplikasi. Misalnya, sebagai ganti hard-code string ke dalam kode Anda, beri nama string tersebut dan tambahkan ke file res/values/strings.xml.
Selalu eksternalkan sumber daya seperti sumber daya dapat digambar, ikon, layout, dan string. Inilah alasan mengapa hal itu penting:
- Anda bisa memelihara sumber daya yang dieksternalkan secara terpisah dari kode lainnya. Jika sumber daya digunakan di sejumlah tempat dalam kode dan perlu diubah, Anda hanya perlu mengubahnya di satu tempat.
- Anda bisa menyediakan sumber daya alternatif yang mendukung konfigurasi perangkat tertentu, misalnya perangkat dengan berbagai bahasa atau ukuran layar. Hal ini menjadi semakin penting karena semakin banyak perangkat berbasis Android yang tersedia.
Mengelompokkan sumber daya
Simpan semua sumber daya Anda dalam folder res/. Atur sumber daya berdasarkan tipe ke dalam folder di /res. Anda harus menggunakan nama standar untuk folder-folder ini.
Misalnya, tangkapan layar berikut menampilkan hierarki file untuk proyek kecil, sebagaimana terlihat dalam tampilan Project "Android" di Android Studio. Folder yang berisi sumber daya default proyek ini menggunakan nama standar:
drawable
, layout
, menu
, mipmap
(untuk ikon), dan values
.
Tabel 1 mencantumkan nama folder sumber daya standar. Tipe dijelaskan lebih lengkap dalam panduan Menyediakan Sumber Daya.
Tabel 1: Nama Folder Sumber Daya Standar
Nama
|
Tipe Sumber Daya
|
animator/
|
File XML yang mendefinisikan animasi properti.
|
anim/
|
File XML yang mendefinisikan animasi tween.
|
color/
|
File XML yang mendefinisikan "daftar keadaan" warna. (Ini berbeda dari file colors.xml dalam folder values/.) Lihat Sumber Daya Daftar Keadaan Warna.
|
drawable/
|
File Bitmap (WebP, PNG, 9-patch, JPG, GIF) dan file XML yang dikompilasi menjadi sumber daya dapat digambar. Lihat Sumber Daya Dapat Digambar.
|
mipmap/
|
File sumber daya dapat digambar untuk beragam kepadatan ikon peluncur. Lihat Ringkasan Proyek.
|
layout/
|
File XML yang mendefinisikan layout antarmuka pengguna. Lihat Sumber Daya Layout.
|
menu/
|
File XML yang mendefinisikan menu aplikasi. Lihat Sumber Daya Menu.
|
raw/
|
File arbitrer yang disimpan dalam bentuk mentah. Untuk membuka sumber daya ini dengan InputStream mentah, panggil Resources.openRawResource() bersama ID sumber daya, yaitu
R.raw.filename . Jika Anda memerlukan akses ke nama file dan hierarki file asli, pertimbangkan untuk menyimpan sumber daya dalam folder assets/ sebagai ganti res/raw/. File dalam assets/ tidak diberi ID sumber daya, sehingga Anda bisa membacanya hanya dengan menggunakan AssetManager. |
values/
|
File XML yang berisi nilai-nilai sederhana, seperti string, integer, dan warna. Untuk kejelasan, tempatkan tipe sumber daya yang unik dalam file berbeda. Misalnya, inilah beberapa ketentuan penamaan file untuk sumber daya yang bisa Anda buat dalam folder ini:
|
xml/
|
File XML arbitrer yang bisa dibaca pada waktu proses dengan memanggil Resources.getXml(). Berbagai file konfigurasi XML, seperti konfigurasi yang dapat ditelusuri, harus disimpan di sini, bersama setelan preferensi.
|
Sumber daya alternatif
Sebagian besar aplikasi menyediakan sumber daya alternatif untuk mendukung konfigurasi perangkat tertentu. Misalnya, aplikasi Anda harus menyertakan sumber daya dapat digambar alternatif untuk kepadatan layar berbeda, dan sumber daya string alternatif untuk bahasa yang berbeda. Pada waktu proses, Android akan mendeteksi konfigurasi perangkat saat ini dan memuat sumber daya yang sesuai untuk aplikasi Anda.
Jika tidak ada sumber daya yang tersedia untuk konfigurasi perangkat tertentu, Android menggunakan sumber daya default yang Anda sertakan dalam aplikasi—sumber daya dapat digambar default, yang terdapat dalam folder res/drawable/, string teks default, yang ada dalam file res/values/strings.xml, dan seterusnya.
Seperti sumber daya default, sumber daya alternatif disimpan dalam folder dalam res/. Folder sumber daya alternatif menggunakan konvensi penamaan berikut:
-
adalah nama folder untuk tipe sumber daya ini, seperti yang ditampilkan dalam Tabel 1. Misalnya, "drawable" atau "values".
menetapkan konfigurasi perangkat yang menggunakan sumber daya ini. Qualifier yang memungkinkan ditampilkan dalam Tabel 2.Untuk menambahkan beberapa qualifier ke satu nama folder, pisahkan qualifier dengan tanda hubung. Jika menggunakan qualifier untuk folder sumber daya, Anda harus mencantumkannya agar qualifier tersebut dicantumkan dalam Tabel 2.
Contoh dengan satu qualifier:
- Sumber daya string yang dilokalkan ke bahasa Jepang akan ada dalam file
res/values-ja/strings.xml
. Sumber daya string default (sumber daya yang akan digunakan bila sumber daya khusus bahasa tidak ditemukan) akan ada dalamres/values/strings.xml
. Perhatikan, file XML memiliki nama identik, dalam hal ini "strings.xml". - Sumber daya gaya untuk API level 21 dan yang lebih tinggi akan ada dalam file
res/values-v21/styles.xml
. Sumber daya gaya default akan ada dalamres/values/styles.xml
.
Contoh dengan beberapa qualifier:
- Sumber daya layout untuk layout kanan ke kiri yang berjalan dalam mode "malam" akan ada dalam folder
res/layout-ldrtl-night/
.
Dalam tampilan "Android" di Android Studio, qualifier tidak ditambahkan ke akhir folder. Sebagai gantinya, qualifier akan ditampilkan berupa label di sisi kanan file dalam tanda kurung. Misalnya, dalam tampilan "Android" di bawah ini, folder
res/values/dimens.xml/
menampilkan dua file:- File
dimens.xml
, yang menyertakan sumber daya dimensi default. - File
dimens.xml (w820dp)
, yang menyertakan sumber daya dimensi untuk perangkat dengan lebar layar yang tersedia minimum 820 dp.
- Dalam tampilan "Android" di Android Studio, sumber daya default untuk dimensi ditampilkan dalam folder yang sama dengan sumber daya alternatif untuk dimensi.
Dalam tampilan "Project" di Android Studio, informasi yang sama disajikan secara berbeda, seperti yang ditampilkan dalam tangkapan layar di bawah ini.
- Dalam tampilan "Project" di Android Studio, sumber daya default untuk dimensi ditampilkan dalam folder
res/values
. - Sumber daya alternatif untuk dimensi ditampilkan dalam folder
res/values-
.
Tabel 2 menampilkan qualifier konfigurasi yang didukung Android. Qualifier tersebut dicantumkan dalam urutan yang harus Anda gunakan saat mengombinasikan beberapa qualifier dalam satu nama folder. Misalnya dalam
res/layout-ldrtl-night/
, qualifier untuk arah layout dicantumkan sebelum qualifier untuk mode malam, karena arah layout dicantumkan sebelum mode malam dalam tabel.
Qualifier ini dijelaskan secara detail dalam Menyediakan Sumber Daya Alternatif.
Tabel 2: Qualifier untuk Menamakan Sumber Daya Alternatif
Prioritas
|
Qualifier
|
Keterangan
|
1
|
MCC dan MNC
|
Kode negara seluler (MCC), secara opsional diikuti oleh kode jaringan seluler (MNC) dari kartu SIM dalam perangkat. Misalnya,
mcc310 adalah A.S. untuk operator mana saja, mcc310-mnc004 adalah A.S. untuk Verizon, dan mcc208-mnc00 adalah Prancis untuk Orange. |
2
|
Pelokalan
|
Bahasa, atau bahasa dan region Contoh:
en , en-rUS , fr-rFR , fr-rCA . Dijelaskan dalam Pelokalan, di bawah ini. |
3
|
Arah layout
|
Arah layout aplikasi Anda. Nilai-nilai yang memungkinkan antara lain
ldltr (arah layout kiri ke kanan, yang merupakan default) dan ldrtl (arah layout kanan ke kiri).
Untuk mengaktifkan fitur layout kanan ke kiri, setel supportsRtl ke
"true" dan setel targetSdkVersion ke 17 atau yang lebih tinggi. |
4
|
Lebar terkecil
|
Ukuran layar dasar sebagaimana ditunjukkan oleh dimensi terpendek dari area layar yang tersedia. Contoh:
sw320dp . Dijelaskan dalam Lebar terkecil, di bawah ini. |
5
|
Lebar yang tersedia
|
Lebar layar minimum yang tersedia tempat sumber daya digunakan. Ditetapkan dalam unit dp. Formatnya adalah
wdp , misalnya, w720dp dan w1024dp . |
6
|
Tinggi yang tersedia
|
Tinggi layar minimum yang tersedia tempat sumber daya digunakan. Ditetapkan dalam unit dp. Formatnya adalah
hdp , misalnya, h720dp dan h1024dp . |
7
|
Ukuran layar
|
Nilai-nilai yang memungkinkan:
|
8
|
Aspek layar
|
Nilai-nilai yang memungkinkan antara lain
long (untuk layar seperti WQVGA, WVGA, FWVGA) dan notlong (untuk layar seperti QVGA, HVGA, dan VGA). |
9
|
Layar bulat
|
Nilai-nilai yang memungkinkan antara lain
round (untuk layar seperti pada perangkat bulat yang dapat dikenakan) dan notround (untuk layar persegi panjang seperti ponsel). |
10
|
Orientasi layar
|
Nilai-nilai yang memungkinkan:
port, land. Dijelaskan dalam Orientasi layar, di bawah ini. |
11
|
Mode UI
|
Nilai-nilai yang memungkinkan:
|
12
|
Mode malam
|
Nilai-nilai yang memungkinkan:
|
13
|
Kepadatan piksel layar
|
Nilai-nilai yang memungkinkan:
Catatan: Menggunakan qualifier kepadatan tidak berarti sumber daya hanya untuk layar dengan kepadatan itu saja. Jika Anda tidak menyediakan sumber daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem mungkin akan menggunakan sumber daya mana saja yang paling cocok.
|
14
|
Tipe layar sentuh
|
Nilai-nilai yang memungkinkan antara lain
notouch (perangkat tidak memiliki layar sentuh) dan finger (perangkat memiliki layar sentuh). |
15
|
Ketersediaan keyboard
|
Nilai-nilai yang memungkinkan:
|
16
|
Metode masukan teks utama
|
Nilai-nilai yang memungkinkan:
|
17
|
Ketersediaan tombol navigasi
|
Nilai-nilai yang memungkinkan antara lain
navexposed (tombol navigasi tersedia untuk pengguna) dan navhidden (tombol navigasi tidak tersedia, misalnya di balik penutup yang tertutup). |
18
|
Metode navigasi non-sentuh utama
|
Nilai-nilai yang memungkinkan:
|
19
|
Versi platform (API level)
|
Level API yang didukung oleh perangkat. Dijelaskan dalam Versi platform, di bawah ini.
|
Membuat sumber daya alternatif
Untuk membuat folder sumber daya alternatif paling mudah di Android Studio, gunakan tampilan "Android" dalam jendela alat (bantu) Project.
- Memilih tampilan "Android" di Android Studio. Jika Anda tidak melihat opsi ini, pastikan jendela alat (bantu) Project terlihat dengan memilih View > Tool Windows > Project.
Untuk menggunakan Android Studio dalam membuat folder sumber daya alternatif khusus konfigurasi yang baru dalam res/:
- Pastikan Anda menggunakan tampilan "Android", seperti yang ditampilkan di atas.
- Klik kanan folder res/ dan pilih New > Android resource directory. Kotak dialog New Resource Directory akan muncul.
- Pilih tipe sumber daya (dijelaskan dalam Tabel 1) dan qualifier (dijelaskan dalam Tabel 2) yang diterapkan pada rangkaian sumber daya alternatif ini.
- Klik OK.
Jika Anda tidak bisa melihat folder baru di jendela alat (bantu) Project di Android Studio, beralihlah ke tampilan "Project", seperti yang ditampilkan dalam tangkapan layar di bawah ini. Jika Anda tidak melihat opsi ini, pastikan jendela alat (bantu) Project terlihat dengan memilih View > Tool Windows > Project.
Simpan sumber daya alternatif dalam folder baru File sumber daya alternatif harus diberi nama yang sama persis dengan file sumber daya default, misalnya "styles.xml" atau "dimens.xml".
Untuk dokumentasi lengkap tentang sumber daya alternatif, lihat Menyediakan Sumber Daya Alternatif.
Qualifier sumber daya alternatif umum
Bagian ini menjelaskan beberapa qualifier yang umum digunakan. Tabel 2 menyediakan daftar lengkap.
Orientasi layar
Qualifier orientasi layar memiliki dua nilai yang memungkinkan:
port
: Perangkat dalam mode potret (vertikal). Misalnya,res/layout-port/
akan berisi file layout untuk digunakan saat perangkat dalam mode potret.land
: Perangkat dalam mode lanskap (horizontal). Misalnya,res/layout-land/
akan berisi file layout untuk digunakan saat perangkat dalam mode lanskap.
Jika pengguna memutar layar saat aplikasi berjalan, dan sumber daya alternatif tersedia, Android akan secara otomatis memuat ulang aplikasi Anda dengan sumber daya alternatif yang cocok dengan konfigurasi perangkat baru. Untuk informasi tentang mengontrol cara aplikasi Anda berperilaku selama perubahan konfigurasi, lihat Menangani Perubahan Waktu Proses.
Untuk membuat varian file XML layout Anda untuk orientasi lanskap dan tampilan yang lebih besar, gunakan editor layout. Untuk menggunakan editor layout:
- Di Android Studio, buka file XML. Editor layout akan muncul.
- Dari menu tarik-turun dalam menu Layout Variants, pilih opsi seperti Create Landscape Variant. Menu Layout Variants, yang tampak saat file XML terbuka di Android Studio, disorot dalam tangkapan layar di bawah ini.
Layout untuk orientasi lanskap yang berbeda akan muncul, dan file XML baru akan dibuatkan untuk Anda. Misalnya, Anda memiliki file bernama "activity_main.xml (land)" beserta file "activity_main.xml" asal. Anda bisa menggunakan editor untuk mengubah layout baru tanpa mengubah layout asal.
Lihat praktik sebelumnya tentang layout untuk contoh desain layout.
Lebar terkecil
Qualifier lebar terkecil menetapkan lebar minimum perangkat. Ini adalah tinggi dan lebar layar terpendek yang tersedia, "lebar terkecil" untuk layar. Lebar terkecil adalah karakteristik perangkat yang memiliki ukuran layar tetap, dan tidak berubah saat orientasi layar berubah.
Tetapkan lebar terkecil dalam unit dp, menggunakan format berikut ini:
swdp
dalam hal ini:
adalah lebar minimum. Misalnya, sumber daya dalam suatu file bernama res/values-sw320dp/styles.xml
digunakan jika lebar layar perangkat selalu setidaknya 320 dp.
Anda bisa menggunakan qualifier ini untuk memastikan layout tertentu tidak akan digunakan kecuali jika lebar yang tersedia setidaknya
dps, bagaimanapun orientasi layar saat ini.
Beberapa nilai untuk ukuran layar umum:
- 320, untuk perangkat dengan konfigurasi layar seperti
- 240x320 ldpi (handset QVGA)
- 320x480 mdpi (handset)
- 480x800 hdpi (handset kepadatan tinggi)
- 480, untuk layar seperti 480x800 mdpi (tablet/handset).
- 600, untuk layar seperti 600x1024 mdpi (tablet 7").
- 720, untuk layar seperti 720x1280 mdpi (tablet 10").
Bila aplikasi Anda menyediakan beberapa folder sumber daya dengan nilai berbeda untuk qualifier lebar terkecil, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi) lebar terkecil perangkat.
Contoh:
res/values-sw600dp/dimens.xml
berisi dimensi untuk gambar. Bila aplikasi berjalan pada perangkat dengan lebar terkecil 600 dp atau yang lebih tinggi (seperti tablet), Android akan menggunakan gambar dalam folder ini.Versi platform
Qualifier versi platform menetapkan API level minimum yang didukung oleh perangkat. Misalnya, gunakan
v11
untuk API level 11 (perangkat dengan Android 3.0 atau yang lebih tinggi). Lihat dokumen Android API level untuk informasi selengkapnya tentang nilai ini.
Gunakan qualifier versi platform bila Anda menggunakan sumber daya untuk fungsionalitas yang tidak tersedia dalam versi Android sebelumnya.
Misalnya, gambar WebP memerlukan API level 14 (Android 4.0) atau yang lebih tinggi, dan untuk dukungan penuh diperlukan API level 17 (Android 4.2) atau yang lebih tinggi. Jika Anda menggunakan gambar WebP:
- Letakkan versi default gambar dalam folder
res/drawable
. Gambar ini harus menggunakan format gambar yang didukung untuk semua API level, misalnya PNG. - Letakkan versi gambar WebP dalam folder
res/drawable-v17
. Jika perangkat menggunakan API Level 17 atau yang lebih tinggi, Android akan memilih sumber daya ini pada waktu proses.
Pelokalan
Qualifier pelokalan menetapkan bahasa, dan region yang bersifat opsional. Qualifier ini adalah dua huruf kode bahasa ISO 639-1, bisa diikuti oleh dua huruf kode region ISO 3166-1-alpha-2 (diawali oleh huruf kecil
r
).
Anda bisa menetapkan bahasa saja, namun tidak boleh region saja. Contoh:
res/values-fr-rFR/strings.xml
String dalam file ini digunakan pada perangkat yang dikonfigurasi untuk bahasa Prancis dan regionnya juga disetel ke France.res/mipmap-fr-rCA/
Ikon dalam folder ini digunakan pada perangkat yang dikonfigurasi untuk bahasa Prancis dan regionnya disetel ke Canada.res/layout-ja/content_main.xml
Layout ini digunakan pada perangkat yang dikonfigurasi untuk bahasa Jepang.
Jika pengguna mengubah bahasa atau region dalam setelan sistem perangkat saat aplikasi berjalan, dan jika sumber daya alternatif tersedia, Android akan secara otomatis memuat ulang aplikasi Anda dengan sumber daya alternatif yang cocok dengan konfigurasi perangkat baru. Untuk informasi tentang mengontrol cara aplikasi Anda berperilaku selama perubahan konfigurasi, lihat Menangani Perubahan Waktu Proses.
Untuk panduan lengkap tentang pelokalan, lihat Melokalkan dengan Sumber Daya.
Menyediakan sumber daya default
Sumber daya default menetapkan desain dan materi default untuk aplikasi Anda. Misalnya, saat aplikasi berjalan dalam lokal yang tidak Anda sediakan teks lokal khususnya, Android akan memuat string default dari res/values/string.xml. Jika file default ini tidak ada, atau jika file kehilangan bahkan satu string yang diperlukan oleh aplikasi, maka aplikasi Anda tidak akan berjalan dan akan menampilkan kesalahan.
Sumber daya default memiliki nama folder sumber daya standar (
values
, misalnya) tanpa qualifier dalam nama folder atau dalam tanda kurung setelah nama file.- Sumber daya defaultTip: Selalu sediakan sumber daya default, karena aplikasi mungkin berjalan pada konfigurasi perangkat yang tidak Anda antisipasi.
Kadang-kadang versi Android baru menambahkan qualifier konfigurasi yang tidak didukung versi lama. Jika Anda menggunakan qualifier sumber daya baru dan mempertahankan kompatibilitas kode dengan versi Android lama, maka saat versi Android lama menjalankan aplikasi, aplikasi akan mogok kecuali jika sumber daya default tersedia. Hal ini karena versi Android lama tidak bisa menggunakan sumber daya alternatif yang diberi nama dengan qualifier baru.
Misalnya, anggaplah
minSdkVersion
Anda disetel ke 4
dan tetapkan semua sumber daya dapat digambar menggunakan mode malam, yang berarti bahwa Anda meletakkan sumber daya dapat digambar dalam res/drawable-night/
dan res/drawable-notnight/
. Dalam contoh ini:- Bila perangkat API level 4 perangkat menjalankan aplikasi, perangkat tidak bisa mengakses sumber daya dapat digambar. Versi Android tidak mengetahui tentang
night
dannotnight
, karena qualifier ini tidak ditambahkan hingga API level 8. Aplikasi mogok, karena tidak menyertakan sumber daya default apa pun untuk digunakan.
Dalam contoh ini, Anda mungkin ingin
notnight
menjadi kasus default Anda. Untuk menyelesaikan masalah, keluarkan qualifier notnight
dan masukkan sumber daya dapat digambar Anda dalam res/drawable/
dan res/drawable-night/
. Dengan solusi ini:- Bila perangkat API level 4 menjalankan aplikasi, aplikasi akan menggunakan sumber daya dalam folder
res/drawable/
default. - Bila perangkat pada API level 8 atau yang lebih tinggi menggunakan aplikasi, aplikasi akan menggunakan sumber daya dalam folder
res/drawable-night/
kapan pun perangkat dalam mode malam. Pada saat lainnya, perangkat akan menggunakan sumber daya (notnight
) default.
Untuk menyediakan kompatibilitas perangkat terbaik, sediakan sumber daya default untuk setiap sumber daya yang diperlukan aplikasi Anda. Setelah sumber daya default Anda berada di tempatnya, buat sumber daya alternatif untuk konfigurasi perangkat khusus dengan menggunakan qualifier konfigurasi perangkat khusus seperti yang ditampilkan dalam Tabel 2.