Aplikasi Anda berfungsi dengan baik pada ponsel dalam orientasi potret, sehingga Anda membatasi aplikasi ke orientasi potret. Namun, Anda melihat peluang untuk melakukan lebih banyak hal pada perangkat layar besar dalam orientasi lanskap.
Bagaimana cara melakukan keduanya—membatasi aplikasi ke orientasi potret di layar kecil, tetapi mengaktifkan orientasi lanskap pada perangkat layar besar?
Praktik terbaik
Aplikasi terbaik menghormati preferensi pengguna seperti orientasi perangkat.
Panduan kualitas aplikasi Adaptif merekomendasikan agar aplikasi mendukung semua konfigurasi perangkat, termasuk orientasi potret dan lanskap, mode multi-aplikasi, serta status terlipat dan terbentang perangkat foldable. Aplikasi harus mengoptimalkan tata letak dan antarmuka pengguna untuk berbagai konfigurasi, dan aplikasi harus menyimpan serta memulihkan status selama perubahan konfigurasi.
Urutan langkah ini adalah tindakan sementara—dukungan kecil untuk perangkat layar besar. Gunakan urutan langkah ini hingga Anda dapat meningkatkan kualitas aplikasi untuk memberikan dukungan penuh bagi semua konfigurasi perangkat.
Bahan
screenOrientation: Setelan manifes aplikasi yang memungkinkan Anda menentukan respons aplikasi terhadap perubahan orientasi perangkatActivity#setRequestedOrientation(): Metode yang dapat Anda gunakan untuk mengubah orientasi aplikasi saat runtimeLocalConfiguration: Penyedia lokal composable yang mengeksposConfigurationperangkat saat ini, sehingga Anda dapat membaca dimensi layar dalam DP.LaunchedEffect: Compose side-effect API yang menjalankan blok kode saat kunci berubah (dalam hal ini, saat konfigurasi berubah).
Langkah
Buat aplikasi agar mampu menangani perubahan orientasi secara default di manifes aplikasi. Kemudian, saat runtime, gunakan Jetpack Compose untuk membatasi orientasi secara dinamis ke potret pada layar ringkas (ponsel) sekaligus mengizinkan semua orientasi pada layar besar.
1. Menentukan setelan orientasi dalam manifes aplikasi
Anda dapat menghindari mendeklarasikan elemen screenOrientation dari manifes
aplikasi (jika orientasi default adalah unspecified) atau menyetel orientasi
layar ke fullUser. Jika pengguna belum mengunci rotasi berbasis sensor, aplikasi Anda akan mendukung semua orientasi perangkat.
<activity
android:name=".MyActivity"
android:screenOrientation="fullUser">
Perbedaan antara penggunaan unspecified dan fullUser kecil, tetapi
penting. Jika Anda tidak mendeklarasikan nilai screenOrientation, sistem akan memilih orientasi, dan kebijakan yang digunakan sistem untuk menentukan orientasi mungkin berbeda dari satu perangkat ke perangkat lainnya. Di sisi lain, menentukan fullUser lebih cocok dengan
perilaku yang ditentukan pengguna untuk perangkat: jika pengguna telah
mengunci rotasi berbasis sensor, aplikasi akan mengikuti preferensi pengguna; jika tidak,
sistem akan mengizinkan salah satu dari empat kemungkinan orientasi layar (potret,
lanskap, potret terbalik, atau lanskap terbalik). Lihat
android:screenOrientation.
2. Membatasi orientasi secara dinamis di Compose
Di Jetpack Compose, Anda dapat membaca dimensi layar saat ini dalam DP secara reaktif
dari LocalConfiguration.current dan menggunakan LaunchedEffect untuk mengupdate
orientasi Aktivitas setiap kali konfigurasi berubah.
Jika lebar atau tinggi layar kurang dari 600dp (sesuai dengan
titik henti sementara ringkas untuk ponsel), batasi orientasi ke potret. Jika tidak,
izinkan sistem memutar aplikasi berdasarkan preferensi pengguna (unspecified
atau fullUser).
Berikut adalah implementasi lengkap yang dapat dikompilasi:
val configuration = LocalConfiguration.current val context = LocalActivity.current LaunchedEffect(configuration) { val activity = context ?: return@LaunchedEffect // Determine if screen is compact (phone-sized) in either width or height val isCompact = configuration.screenWidthDp < 600 || configuration.screenHeightDp < 600 activity.requestedOrientation = if (isCompact) { ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } else { ActivityInfo.SCREEN_ORIENTATION_FULL_USER } }
Dengan menambahkan logika di dalam blok LaunchedEffect(configuration), Anda dapat
mengganti setelan orientasi secara reaktif setiap kali konfigurasi aplikasi
berubah, seperti saat aktivitas diubah ukurannya, dipindahkan di antara tampilan, atau saat
perangkat foldable dilipat atau dibentangkan.
Untuk mengetahui informasi selengkapnya tentang kapan perubahan konfigurasi terjadi dan kapan perubahan tersebut menyebabkan pembuatan ulang aktivitas, lihat Menangani perubahan konfigurasi.
Hasil
Aplikasi Anda akan tetap dalam orientasi potret di layar kecil, apa pun rotasi perangkatnya. Pada perangkat layar besar, aplikasi akan mendukung orientasi lanskap dan potret.
Referensi lainnya
Untuk bantuan dalam melakukan upgrade aplikasi Anda agar selalu mendukung semua konfigurasi perangkat, lihat artikel berikut: