Çıkarılabilir klavye yönetimi

Üç yıldız puanı simgesi

Çı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:

  1. Sistemin çalışan etkinliği yeniden oluşturmasına izin verin ve uygulamanızın durumunu yönetin.
  2. 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:

  1. Tepkisel kullanıcı arayüzü: LocalConfiguration.current kullanarak 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.
  2. 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 DisposableEffect kullanı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ı Configuration gö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 DisposableEffect kullanın.ComponentActivity

    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 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.