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

  1. Çalışan etkinliği sistemin yeniden oluşturmasına izin verin ve uygulamanızın durumunu yönetme işini siz üstlenin.
  2. 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:

  1. Tepkisel kullanıcı arayüzü: LocalConfiguration.current kullanarak 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.
  2. 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ı DisposableEffect kullanı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 cihaz Configuration değ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çin DisposableEffect kullanı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.