Çıkarılabilir klavye desteği, büyük ekranlı cihazlarda kullanıcı üretkenliğini en üst düzeye çıkarmaya yardımcı olur. Android, bir cihaza klavye her takıldığında veya cihazdan her çıkarıldığında yapılandırma değişikliğini tetikler. Bu durum, kullanıcı arayüzü durumunun kaybolmasına neden olabilir. Uygulamanız, durumunu kaydedip geri yükleyerek sistemin etkinlik yeniden oluşturma işlemini yapmasına izin verebilir veya klavye yapılandırma değişiklikleri için etkinlik yeniden oluşturmayı kısıtlayabilir.
Her durumda, klavye ile ilgili tüm veriler Configuration nesnesinde saklanır. Yapılandırma nesnesinin keyboard ve keyboardHidden alanları, klavye türü ve kullanılabilirliği hakkında bilgiler içerir.
En iyi uygulamalar
Büyük ekranlar için optimize edilmiş uygulamalar; yazılım ve donanım klavyelerden kaleme, fareye, izleme dörtgenine ve diğer çevre birimlerine kadar her tür giriş cihazını destekler.
Harici klavye desteği, yapılandırma değişiklikleri gerektirir. Bu değişiklikleri iki şekilde yönetebilirsiniz:
- Sistemin çalışan etkinliği yeniden oluşturmasına izin verin ve uygulamanızın durumunu yönetin.
- Yapılandırma değişikliğini kendiniz yönetin (etkinlik yeniden oluşturulmaz):
- Klavyeyle ilgili tüm yapılandırma değerlerini beyan edin
- Yapılandırma değişikliği işleyicisi oluşturma
Genellikle metin girişi ve diğer girişler için kullanıcı arayüzünün hassas kontrolünü gerektiren üretkenlik uygulamaları, yapılandırma değişikliklerini ele alma konusunda kendin yap yaklaşımından yararlanabilir.
Özel durumlarda, donanım klavyesi takıldığında veya çıkarıldığında uygulama düzeninizi değiştirmek isteyebilirsiniz. Örneğin, araçlar veya düzenleme pencereleri için daha fazla alan oluşturmak isteyebilirsiniz.
Jetpack Compose'da klavye yapılandırma değişikliklerine iki şekilde tepki verebilirsiniz:
- Tepkisel kullanıcı arayüzü:
LocalConfiguration.currentkullanarak mevcut yapılandırma durumunu doğrudan Composables'ınızda okuyun. Klavye takıldığında veya çıkarıldığında kullanıcı arayüzü, yeni duruma uyum sağlamak için otomatik olarak yeniden oluşturulur. - Yan Etki Geri Çağırması: Ana makine etkinliğinde bir yapılandırma değişikliği dinleyicisi kaydetmek için yaşam döngüsünün farkında olan bir
DisposableEffectkullanın. Bu, etkinliği yeniden oluşturmadan veya herhangi bir sahte görünüm öğesi oluşturmadan kullanıcı arayüzü dışındaki etkinlikleri (ör. günlük kaydı veya analiz) tetiklemenize olanak tanır.
Malzemeler
android:configChanges: Uygulama manifestinin<activity>öğesinin özelliği. Uygulamanın yönettiği yapılandırma değişiklikleri hakkında sistemi bilgilendirir.LocalConfiguration: Mevcut cihazıConfigurationgösteren, birleştirilebilir yerel sağlayıcı.DisposableEffect: Bir Composable, kompozisyona girdiğinde bir kod bloğunu çalıştıran ve çıktığında temizleyen bir yan etki API'si oluşturun.
Adımlar
configChanges özelliğini beyan edin ve etkinliğin yeniden oluşturulmasını önlemek için klavye ile ilgili değerler ekleyin. Ardından, LocalConfiguration.current kullanarak Composable düzeninizi dinamik olarak uyarlayın veya DisposableEffect kullanarak bir yapılandırma dinleyicisi kaydedin.
1. configChanges özelliğini bildirme
Uygulama manifest dosyasındaki <activity> öğesini, halihazırda yönetilen yapılandırma değişiklikleri listesine keyboard|keyboardHidden değerlerini ekleyerek güncelleyin:
<activity
…
android:configChanges="...|keyboard|keyboardHidden">
2. Klavye yapılandırma değişikliklerine yanıt verme
Jetpack Compose'da yapılandırma değişikliklerini işlemek için kullanıcı arayüzünü güncelleyip güncellemediğinize veya bir yan etki geri çağırma işlevi yürütüp yürütmediğinize bağlı olarak aşağıdaki seçeneklerden birini kullanın:
Seçenek A: Tepkisel kullanıcı arayüzü (önerilir)
Klavye türünü doğrudan
LocalConfiguration.currentüzerinden okuyun. Donanım klavyesi bağlandığında veya çıkarıldığında bu değer değişir ve Compose, kullanıcı arayüzünüzü otomatik olarak yeniden oluşturur.val configuration = LocalConfiguration.current val isPhysicalKeyboardAttached = configuration.keyboard == Configuration.KEYBOARD_QWERTY if (isPhysicalKeyboardAttached) { // Render layout optimized for physical keyboard } else { // Render default layout }
B seçeneği: Yan etki dinleyicisi
Yapılandırma değiştiğinde bir yan etki (ör. günlük kaydetme, yerel veritabanını güncelleme veya analizleri tetikleme) çalıştırmanız gerekiyorsa ana makinede yapılandırma değişikliği dinleyicisi kaydetmek için
DisposableEffectkullanın.ComponentActivityval 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) } }
Sonuçlar
Uygulamanız artık çalışan etkinliği yeniden oluşturmadan harici bir klavye takıldığında veya çıkarıldığında yanıt verecek.
Ek kaynaklar
Uygulamanızın kullanıcı arayüzü durumunu klavye ekleme veya çıkarma gibi yapılandırma değişiklikleri sırasında nasıl kaydedeceğinizi öğrenmek için Kullanıcı arayüzü durumlarını kaydetme başlıklı makaleyi inceleyin.