Dukungan untuk keyboard lepas pasang membantu memaksimalkan produktivitas pengguna di perangkat layar besar. Android memicu perubahan konfigurasi setiap kali keyboard dipasang atau dilepas dari perangkat, yang dapat menyebabkan hilangnya status UI. Aplikasi Anda dapat menyimpan dan memulihkan statusnya, sehingga sistem dapat menangani pembuatan ulang aktivitas, atau membatasi pembuatan ulang aktivitas untuk perubahan konfigurasi keyboard.
Dalam semua kasus, semua data yang terkait dengan keyboard disimpan dalam objek Configuration. Kolom keyboard dan keyboardHidden dari objek konfigurasi
berisi informasi tentang jenis keyboard dan ketersediaannya.
Praktik terbaik
Aplikasi yang dioptimalkan untuk perangkat layar besar mendukung setiap jenis perangkat input, mulai dari keyboard software dan hardware hingga stilus, mouse, trackpad, dan perangkat periferal lainnya.
Dukungan untuk keyboard eksternal melibatkan perubahan konfigurasi, yang dapat Anda kelola dengan salah satu dari dua cara:
- Biarkan sistem membuat ulang aktivitas yang sedang berjalan, dan Anda menangani pengelolaan status aplikasi Anda.
- Mengelola sendiri perubahan konfigurasi (aktivitas tidak akan dibuat ulang):
- Mendeklarasikan semua nilai konfigurasi terkait keyboard
- Membuat pengendali perubahan konfigurasi
Aplikasi produktivitas, yang sering kali memerlukan kontrol UI yang mendetail untuk entri teks dan input lainnya, dapat memanfaatkan pendekatan mandiri untuk menangani perubahan konfigurasi.
Dalam kasus khusus, Anda mungkin ingin mengubah tata letak aplikasi saat keyboard hardware dipasang atau dilepas, misalnya, untuk memberikan lebih banyak ruang bagi alat atau jendela pengeditan.
Di Jetpack Compose, Anda dapat merespons perubahan konfigurasi keyboard dengan dua cara:
- UI Reaktif: Baca status konfigurasi saat ini langsung di
Composable Anda menggunakan
LocalConfiguration.current. UI akan otomatis merekomposisi untuk beradaptasi dengan status baru saat keyboard dipasang atau dilepas. - Callback Efek Samping: Gunakan
DisposableEffectyang berbasis siklus proses untuk mendaftarkan pemroses perubahan konfigurasi pada Aktivitas host, yang memungkinkan Anda memicu peristiwa non-UI (seperti logging atau analisis) tanpa membuat ulang aktivitas atau membuat instance elemen tampilan tiruan apa pun.
Bahan
android:configChanges: Atribut elemen<activity>manifes aplikasi. Memberi tahu sistem tentang perubahan konfigurasi yang dikelola aplikasi.LocalConfiguration: Penyedia lokal composable yang mengeksposConfigurationperangkat saat ini.DisposableEffect: API efek samping Compose yang menjalankan blok kode saat Composable memasuki komposisi, dan melakukan pembersihan saat keluar.
Langkah
Deklarasikan atribut configChanges dan tambahkan nilai terkait keyboard untuk mencegah
pembuatan ulang aktivitas. Kemudian, gunakan LocalConfiguration.current untuk
menyesuaikan tata letak Composable secara dinamis, atau daftarkan pemroses konfigurasi
menggunakan DisposableEffect.
1. Mendeklarasikan atribut configChanges
Perbarui elemen <activity> dalam manifes aplikasi dengan menambahkan nilai keyboard|keyboardHidden ke daftar perubahan konfigurasi yang sudah dikelola:
<activity
…
android:configChanges="...|keyboard|keyboardHidden">
2. Merespons perubahan konfigurasi keyboard
Untuk menangani perubahan konfigurasi di Jetpack Compose, gunakan salah satu opsi berikut, bergantung pada apakah Anda mengupdate UI atau menjalankan callback efek samping:
Opsi A: UI Reaktif (Direkomendasikan)
Baca jenis keyboard langsung dari
LocalConfiguration.current. Saat keyboard hardware dipasang atau dilepas, nilai ini akan berubah, dan Compose akan otomatis merekomposisi UI Anda.val configuration = LocalConfiguration.current val isPhysicalKeyboardAttached = configuration.keyboard == Configuration.KEYBOARD_QWERTY if (isPhysicalKeyboardAttached) { // Render layout optimized for physical keyboard } else { // Render default layout }
Opsi B: Pemroses Efek Samping
Jika Anda perlu menjalankan efek samping (seperti logging, memperbarui database lokal, atau memicu analisis) saat konfigurasi berubah, gunakan
DisposableEffectuntuk mendaftarkan pemroses perubahan konfigurasi diComponentActivityhost.val context = LocalActivity.current DisposableEffect(context) { val activity = context as? ComponentActivity val listener = Consumer<Configuration> { newConfig -> val hasKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY // Trigger non-UI actions, analytics, etc. } activity?.addOnConfigurationChangedListener(listener) onDispose { activity?.removeOnConfigurationChangedListener(listener) } }
Hasil
Aplikasi Anda kini akan merespons keyboard eksternal yang dipasang atau dilepas tanpa membuat ulang aktivitas yang sedang berjalan.
Referensi lainnya
Untuk mempelajari cara menyimpan status UI aplikasi selama perubahan konfigurasi seperti pemasangan atau pelepasan keyboard, lihat Menyimpan status UI.