Anjuran dan larangan adaptif

Aplikasi adaptif mendukung tampilan dalam semua ukuran: seluruh layar perangkat, jendela yang dapat diubah ukurannya dalam mode multi-aplikasi, orientasi potret dan lanskap, tampilan terlipat dan terbentang perangkat foldable.

Daftar singkat setelan konfigurasi dan API memungkinkan Anda mem-build aplikasi adaptif. Namun, beberapa setelan dan API yang sudah tidak digunakan lagi tidak kompatibel dengan aplikasi adaptif dan harus dihindari.

Kemampuan untuk berubah ukuran

Aplikasi adaptif mendukung kemampuan aplikasi untuk diubah ukurannya dan mode multi-aplikasi.

Atribut resizeableActivity dari elemen manifes <activity> dan <application> mengaktifkan atau menonaktifkan mode multi-aplikasi di Android 11 (API level 30) dan yang lebih rendah. Di Android 12 (API level 31) dan yang lebih tinggi, layar besar mendukung mode multi-aplikasi, terlepas dari atribut. Untuk mengetahui informasi selengkapnya, lihat Mendukung mode multi-aplikasi.

✓ Lakukan

Aktifkan aplikasi Anda untuk berpartisipasi dalam skenario multitasking multi-aplikasi untuk meningkatkan produktivitas dan kepuasan pengguna.

Tetapkan resizeableActivity="true" jika aplikasi Anda menargetkan level API yang lebih rendah dari 24; jika tidak, lupakan saja—nilainya adalah true secara default di Android 7.0 (level API 24) dan yang lebih tinggi.

✗ Jangan

Jangan tetapkan resizeableActivity="false" untuk level API apa pun. Jangan mengecualikan aplikasi dari kasus penggunaan yang melibatkan mode multi-aplikasi.

Orientasi

Aplikasi adaptif mendukung orientasi potret dan lanskap, terlepas dari ukuran layar atau mode windowing.

Setelan manifes screenOrientation membatasi orientasi aktivitas.

✓ Lakukan

Hapus setelan screenOrientation dari manifes aplikasi Anda.

Mengunci orientasi aplikasi tidak mencegah perubahan ukuran jendela. Ukuran aplikasi diubah saat memasuki mode multi-aplikasi, saat perangkat dilipat atau dibentangkan, atau saat jendela jenis desktop diubah ukurannya. Aplikasi Anda harus mendukung perubahan ukuran jendela, apa pun setelan atribut screenOrientation.

✗ Jangan

Jangan batasi orientasi aktivitas. Aplikasi yang mengunci orientasi akan dijadikan tampilan lebar di perangkat layar besar dan ukuran jendela yang tidak kompatibel.

Aplikasi dengan tampilan lebar akan mengalami penurunan visibilitas di Google Play untuk tablet, perangkat foldable, dan perangkat ChromeOS.

Rasio aspek

Ukuran layar dan jendela bervariasi, begitu juga rasio aspeknya—dari tinggi dan sempit, hingga persegi, hingga pendek dan lebar.

Setelan manifes minAspectRatio dan maxAspectRatio membatasi rasio aspek aplikasi Anda ke nilai hard code.

✓ Lakukan

Sesuaikan aplikasi Anda agar sesuai dengan layar, terlepas dari dimensi relatifnya.

Hapus setelan minAspectRatio dan maxAspectRatio dari manifes aplikasi Anda. Atau pastikan aplikasi Anda dapat diubah ukurannya, dan rasio aspek akan otomatis menyesuaikan (lihat bagian Kemampuan Ubah Ukuran).

✗ Jangan

Jangan mencoba mengontrol dimensi relatif aplikasi Anda. Jika aplikasi berjalan di layar atau di jendela yang memiliki rasio aspek yang tidak kompatibel dengan rasio aspek aplikasi, aplikasi Anda akan ditampilkan dengan tampilan lebar.

Di Android 14 (API level 34) dan yang lebih baru, pengguna dapat mengganti rasio aspek aplikasi untuk memperluas aplikasi dengan tampilan lebar guna mengisi area tampilan yang tersedia. Lihat Mode kompatibilitas perangkat.

Ukuran jendela

Mengoptimalkan tata letak untuk berbagai ukuran tampilan adalah premis utama desain adaptif. Aplikasi adaptif berfokus pada ukuran jendela aplikasi, bukan ukuran layar perangkat. Saat aplikasi dalam layar penuh, jendela aplikasi adalah layar perangkat.

Class ukuran jendela memberikan cara sistematis untuk menentukan dan mengategorikan ukuran jendela aplikasi. Sesuaikan aplikasi Anda dengan mengubah tata letak saat class ukuran jendela aplikasi Anda berubah.

✓ Lakukan

Evaluasi ukuran jendela aplikasi Anda berdasarkan class ukuran jendela.

Untuk menentukan class ukuran jendela, gunakan fungsi level atas currentWindowAdaptiveInfo() dari library Compose Material 3 Adaptif. Untuk informasi selengkapnya, lihat Mem-build aplikasi adaptif.

✗ Jangan

Jangan mengabaikan utilitas definisi class ukuran jendela dan API bawaan. Jangan gunakan API yang tidak digunakan lagi untuk menghitung ukuran jendela.

API yang Tidak Digunakan Lagi

API platform lama tidak mengukur jendela aplikasi dengan benar; beberapa mengukur layar perangkat, beberapa mengecualikan dekorasi sistem.

✓ Lakukan

Gunakan WindowManager#getCurrentWindowMetrics() dan WindowMetrics#getBounds() untuk mendapatkan ukuran jendela aplikasi. Gunakan WindowMetrics#getDensity() untuk mendapatkan kepadatan tampilan.

✗ Jangan

Jangan gunakan Display API berikut yang tidak digunakan lagi untuk menentukan ukuran jendela:

  • getSize(): Tidak digunakan lagi di Android 11 (API level 30)
  • getMetrics(): Tidak digunakan lagi di Android 11 (API level 30)
  • getRealSize(): Tidak digunakan lagi di Android 12 (API level 31)
  • getRealMetrics(): Tidak digunakan lagi di Android 12 (API level 31)

Compose

Jetpack Compose dirancang untuk pengembangan UI adaptif. Tidak ada XML, tidak ada file tata letak, tidak ada penentu resource. Hanya composable stateless berbasis Kotlin seperti Column, Row, dan Box yang mendeskripsikan UI Anda, dan pengubah seperti offset, padding, dan size yang menambahkan perilaku ke elemen UI.

✓ Lakukan

Build dengan Compose. Dapatkan info terbaru tentang fitur dan rilis terbaru.

✗ Jangan

Jangan mengandalkan teknologi yang sudah usang. Jangan biarkan aplikasi Anda menjadi usang.

Library Adaptif Compose Material 3

Library Adaptif Compose Material 3 menyediakan komponen dan API yang memfasilitasi pengembangan aplikasi adaptif.

✓ Lakukan

Gunakan API berikut untuk membuat aplikasi Anda adaptif:

  • NavigationSuiteScaffold: Beralih antara menu navigasi dan kolom samping navigasi bergantung pada class ukuran jendela aplikasi.
  • ListDetailPaneScaffold: Mengimplementasikan tata letak kanonis detail daftar. Menyesuaikan tata letak dengan ukuran jendela aplikasi.
  • SupportingPaneScaffold: Mengimplementasikan tata letak kanonis panel pendukung.
✗ Jangan

Jangan lakukan hal sia-sia. Jangan lewatkan peningkatan produktivitas developer yang disediakan oleh semua library Jetpack Compose.

Tata letak

Pengguna mengharapkan aplikasi memanfaatkan ruang tampilan yang tersedia sebaik mungkin dengan konten tambahan atau kontrol yang ditingkatkan.

Aplikasi adaptif mengoptimalkan tata letak berdasarkan perubahan pada tampilan, khususnya, perubahan ukuran jendela aplikasi atau perubahan postur perangkat.

✓ Lakukan

Ubah komponen UI saat ukuran jendela berubah untuk memanfaatkan ruang tampilan yang tersedia. Misalnya, tukar menu navigasi bawah yang digunakan pada ukuran jendela rapat dengan kolom samping navigasi vertikal pada jendela sedang dan diluaskan. Memposisikan ulang dialog agar dapat dijangkau di semua layar.

Atur konten ke dalam panel untuk mengaktifkan tata letak multipanel seperti panel detail daftar dan panel pendukung untuk tampilan konten dinamis.

✓ Lakukan: Aktivitas daftar dan detail yang diatur dalam tata letak dua panel.
✗ Jangan

Jika Anda tidak menggunakan panel konten, jangan hanya meregangkan elemen UI untuk mengisi ruang tampilan yang tersedia. Baris teks yang panjang sulit dibaca. Tombol yang diregangkan terlihat tidak didesain dengan baik. Jika Anda menggunakan Modifier.fillMaxWidth, jangan asumsikan bahwa itu adalah perilaku yang tepat untuk semua ukuran layar.

✗ Jangan: Tata letak diregangkan untuk mengisi jendela yang diperluas.

Perangkat input

Pengguna tidak hanya menggunakan layar sentuh untuk berinteraksi dengan aplikasi.

Aplikasi adaptif mendukung keyboard, mouse, dan stilus eksternal untuk memberikan pengalaman pengguna yang ditingkatkan dan membantu pengguna menjadi lebih produktif di semua faktor bentuk.

✓ Lakukan

Manfaatkan fungsi bawaan framework Android untuk navigasi tab keyboard dan klik, pilih, dan scroll mouse atau trackpad. Publikasikan pintasan keyboard aplikasi Anda di Bantuan Pintasan Keyboard.

Gunakan library Material 3 Jetpack agar pengguna dapat menulis ke dalam komponen TextField menggunakan stilus.

✗ Jangan

Jangan membuat metode input alternatif menjadi tidak mungkin. Jangan menimbulkan masalah aksesibilitas.

Ringkasan

  • Mem-build aplikasi dengan Compose dan library Adaptif Material 3
  • Tata letak dasar pada class ukuran jendela
  • Membuat tata letak multi-panel
  • Membuat aplikasi agar dapat diubah ukurannya
  • Jangan pernah mengunci orientasi aktivitas
  • Jangan batasi rasio aspek
  • Mendukung input selain sentuh
  • Menghindari API yang tidak digunakan lagi

✓ Lakukan hal yang diharapkan pengguna: optimalkan aplikasi Anda untuk keragaman perangkat yang digunakan orang setiap hari.

✗ Jangan menunggu. Mulai sekarang!