Dukungan untuk keyboard yang dapat dilepas membantu memaksimalkan produktivitas pengguna di perangkat layar besar. Android memicu perubahan konfigurasi setiap kali keyboard terpasang 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 Configuration
objek. 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 berikut:
- Biarkan sistem membuat ulang aktivitas yang sedang berjalan, dan Anda menangani pengelolaan status aplikasi.
- Kelola sendiri perubahan konfigurasi (aktivitas tidak akan dibuat ulang):
- Deklarasikan semua nilai konfigurasi terkait keyboard
- Buat pengendali perubahan konfigurasi
Aplikasi produktivitas, yang sering kali memerlukan kontrol UI yang baik 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 terpasang atau dilepas, misalnya, untuk menyediakan lebih banyak ruang bagi alat atau jendela pengeditan.
Di Jetpack Compose, Anda dapat bereaksi terhadap perubahan konfigurasi keyboard dengan dua cara:
- UI Reaktif: Baca status konfigurasi saat ini langsung di Composable menggunakan
LocalConfiguration.current. UI secara otomatis melakukan rekomposisi untuk beradaptasi dengan status baru saat keyboard terpasang atau dilepas. - Callback Efek Samping: Gunakan
DisposableEffectyang memperhatikan siklus proses untuk mendaftarkan pemroses perubahan konfigurasi di Aktivitas host, yang memungkinkan Anda memicu peristiwa non-UI (seperti logging atau analisis) tanpa membuat ulang aktivitas atau membuat instance elemen tampilan dummy.
Bahan
android:configChanges: Atribut elemen<activity>manifes aplikasi. Memberi tahu sistem tentang perubahan konfigurasi yang dikelola aplikasi.LocalConfiguration: Penyedia lokal composable yang mengekspos perangkatConfiguration.DisposableEffect: API efek samping Compose yang menjalankan blok kode saat Composable memasuki komposisi, dan membersihkan 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. Deklarasikan atribut configChanges
Perbarui elemen <activity> di manifes aplikasi dengan menambahkan nilai
keyboard|keyboardHidden ke daftar perubahan konfigurasi yang sudah dikelola:
<activity
…
android:configChanges="...|keyboard|keyboardHidden">
2. Menanggapi perubahan konfigurasi keyboard
Untuk menangani perubahan konfigurasi di Jetpack Compose, gunakan salah satu opsi berikut, bergantung pada apakah Anda memperbarui UI atau menjalankan callback efek samping:
Opsi A: UI Reaktif (Direkomendasikan)
Baca jenis keyboard langsung dari
LocalConfiguration.current. Saat keyboard hardware terpasang atau dilepas, nilai ini akan berubah, dan Compose akan otomatis melakukan rekomposisi 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 terpasang 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.