Çı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 takıldığında veya cihazdan klavye çıkarıldığında yapılandırma değişikliğini tetikler. Bu durum, kullanıcı arayüzü durumunun kaybolmasına neden olabilir. Uygulamanız, sistemin etkinliği yeniden oluşturmasına izin vererek durumunu kaydedip geri yükleyebilir veya klavye yapılandırma değişiklikleri için etkinliğin yeniden oluşturulmasını kısıtlayabilir.
Tüm durumlarda klavyeyle ilgili tüm veriler bir Configuration nesnesinde depolanır. Yapılandırma nesnesinin keyboard ve keyboardHidden alanları, klavyenin türü ve kullanılabilirliği hakkında bilgi içerir.
En iyi uygulamalar
Büyük ekranlar için optimize edilmiş uygulamalar; yazılım ve donanım klavyelerinden ekran kalemi, fare, dokunmatik yüzey ve diğer çevre birimlerine kadar her tür giriş cihazını destekler.
Harici klavye desteği, yapılandırma değişiklikleri içerir. Bu değişiklikleri iki şekilde yönetebilirsiniz:
- Çalışan etkinliği sistemin yeniden oluşturmasına izin verin ve uygulamanızın durumunu yönetme işini siz üstlenin.
- Yapılandırma değişikliğini kendiniz yönetin (etkinlik yeniden oluşturulmaz):
- Klavyeyle ilgili tüm yapılandırma değerlerini bildirme
- Yapılandırma değişikliği işleyicisi oluşturma
Metin girişi ve diğer girişler için genellikle kullanıcı arayüzünün hassas kontrolünü gerektiren üretkenlik uygulamaları, yapılandırma değişikliklerini işlemek için 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 açmak isteyebilirsiniz.
Jetpack Compose'da klavye yapılandırması değişikliklerine iki şekilde tepki verebilirsiniz:
- Tepkisel kullanıcı arayüzü:
LocalConfiguration.currentkullanarak mevcut yapılandırma durumunu doğrudan composable'ları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ğrısı: Ana makine etkinliğinde bir yapılandırma değişikliği dinleyicisi kaydetmek için yaşam döngüsüne duyarlı
DisposableEffectkullanın. Bu sayede, etkinliği yeniden oluşturmadan veya herhangi bir sahte görünüm öğesini örneklendirmeden kullanıcı arayüzü dışı etkinlikleri (günlüğe kaydetme veya analiz gibi) tetikleyebilirsiniz.
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 cihazConfigurationdeğerini gösteren birleştirilebilir yerel sağlayıcı.DisposableEffect: Bir composable, oluşturma işlemine girdiğinde bir kod bloğu çalıştıran ve ayrıldığında temizleyen Compose yan etki API'si.
Adımlar
Etkinliğin yeniden oluşturulmasını önlemek için configChanges özelliğini tanımlayın ve klavyeyle ilgili değerler ekleyin. Ardından, Composable düzeninizi dinamik olarak uyarlamak için LocalConfiguration.current kullanın veya DisposableEffect kullanarak bir yapılandırma dinleyicisi kaydedin.
1. configChanges özelliğini tanımlayın
Uygulama manifestindeki <activity> öğesini, keyboard|keyboardHidden değerlerini önceden yönetilen yapılandırma değişiklikleri listesine ekleyerek güncelleyin:
<activity
…
android:configChanges="...|keyboard|keyboardHidden">
2. Klavye yapılandırması 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 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:
A seçeneği: Reaktif kullanıcı arayüzü (önerilir)
Klavye türünü doğrudan
LocalConfiguration.currentüzerinden okuyun. Donanım klavyesi takıldığı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 dinleyici
Yapılandırma değiştiğinde bir yan etki (ör. günlük kaydı, yerel veritabanı güncelleme veya analiz tetikleme) çalıştırmanız gerekiyorsa ana makinede (
ComponentActivity) yapılandırma değişikliği dinleyicisi kaydetmek içinDisposableEffectkullanın.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) } }
Sonuçlar
Uygulamanız artık çalışan etkinliği yeniden oluşturmadan harici bir klavyenin takılmasına veya çıkarılmasına yanıt verecek.
Ek kaynaklar
Klavye takma veya çıkarma gibi yapılandırma değişiklikleri sırasında uygulamanızın kullanıcı arayüzü durumunu nasıl kaydedeceğinizi öğrenmek için Kullanıcı arayüzü durumlarını kaydetme başlıklı makaleyi inceleyin.