Bu ekrana özel alanlarda yapılan güncellemeler aşağıda verilmiştir:
Android 10 destekler yazılım klavyesi varsayılan olmayan bir ekranda çalışan uygulamalar için.
Varsayılan olmayan bir ekranda çalışan uygulamalar
Giriş Yöntemi Düzenleyicisi'nin (IME) yazılım klavyesini gösteren ekran açısından, iki farklı mod vardır. Yazılım klavyesi şurada gösterilir:
- Aynı ekran üzerinde odaklanmış uygulama görünür.
- Odaklanmış uygulaması varsayılan olmayan bir ekranda çalışırken Varsayılan ekran.
Sistem, odaklanılan uygulamanın göründüğü ekranın ayarlarına göre hangi modun kullanılacağını belirler. Daha fazla ayrıntı için bkz.
-
DisplayWindowSettings#shouldShowImeLocked()
-
DisplayWindowSettings#setShouldShowImeLocked()
Hedef uygulaması da dahil, ikincil ekranda göründüğü gibi Şekil 1. IME yazılım klavyesi
Sistem tek bir IME kullanır, ancak kullanıcı odağını takip etmek için ekranlar arasında geçiş yapabilir. Android 10, tüm birinci ve üçüncü taraf IME'lerin düzeni otomatik olarak gözden geçirmesini ve oluşturulduğunda yeni ekran boyutuna göre yeniden boyutlandırmasını bekler.
A ekranında aktif bir bağlantı varsa ve bir giriş alanı, B ekranına giriş odağını talep ederse, aşağıdaki akış gerçekleşir:
- B ekranındaki giriş alanından yeni bir giriş bağlantısı gelir.
-
InputMethodManagerServiceçek bağlantı onaylanmış olması gerekir eğer.
- IME için bir ekran seçilir. B ekranı IME'nin gösterilmesini destekliyorsa ve göstermesine izin veriliyorsa, B kullanılır. Aksi takdirde, birincil cihaz ekranı seçilir.
- Seçilen ekran A ekranından değilse, bağlantı yeniden kurulur.
InputMethodServicetahrip ve yeniden oluşturulur.
Güvenlik kısıtlaması
Sistem, sisteme ait olmayan sanal ekranlarda bir IME göstermez. Bu kötü niyetli bir uygulama etkin olan sanal bir görüntü oluşturmak verebilecek bir güvenlik endişesi nedeniyle Sistemi Süsleri Destek ve böyle yazarak tahminleri ve özel arka olarak yüzeyden kullanıcı hassas bilgileri okuyun.
uygulama
Açıklandığı gibi Android 9 (ve daha düşük) olarak, IME, varsayılan ekranda sadece sunulmuştu Ekran Girdi yöntemlerle . Android 10'da (ve sonraki sürümlerde), bir kullanıcı odağı değiştirerek farklı ekranlardaki farklı giriş metin alanları arasında geçiş yapabilir ve IME penceresi ikincil ekranlara geçer.
İçinde uygulanması
WindowManager giriş yöntemi penceresini (yumuşak klavye çizilir IME pencere) ve IME durumunu yönetmek için giriş yöntemi hedef (IME giriş gider pencere) izler.
For
InputMethodManagerService (IMMS), başka hiçbir yerleşik Ekran değişikliği yaymak olabilir mekanizması
InputMethodService başka ekrana odağı taşırken zamanında (IMS) ve yeniden yapılandırmak klavye düzeni.
Ekranlar arasında IME penceresi geçişini sağlamak için Android 10 aşağıdakileri uygular:
- IME ve giriş hedef penceresi şimdi sergileniyor başına izlenir
DisplayContent#mInputMethodWindowve
DisplayContent#mInputMethodTargetWindowManager (WM) bağımsız olarak her ekranın IME odağı durumuna yönetebilmesi için bu.
- Harici ekranda yaptığınız bir uygulama müşterinin odak isteği ile alınan IMMS tarafında,
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus, ilk geçerli giriş yöntemi hizmetini keser ve sonra yeni IME takın hizmet rebinds harici görüntü için belirteci pencere
onServiceConnected().
- Sonra IMS tarafında,
IMS#attachTokenalındığında, aşağıdaki akış oluşur:
-
ContextImpl#updateDisplayhizmet bağlam ekranını güncellemek için denir
InputMethodService#attachToken(). Bu çağrılar
ViewGroup#addView()klavyenin düzenini gözden geçirilmesi ve güncel içerik denetimi hedef ekrana adapte.
- Sonra
DisplayContent#setInputMethodWindowLocked()denir, uygulama süreci düzeyinde görüntülü yapılandırma kullanarak değiştirir gönderir
WindowProcessControllergeçersiz kılma kaynakları ve ekran ölçümlerine IME süreci.
-
InputMethodServiceistemci sonra doğru görünen ölçümlerle doğru yapılandırmayı alır
onConfigurationChanged()ve
ViewGroup#addView()giriş görünümü yeniden başlatmak çağrısı.
-
Çok oturumlu Giriş Yöntemi Düzenleyici desteği
Uygun giriş kaynakları sağlamak için birden çok kullanıcı tarafından aynı anda kullanılması beklenen birden çok ekrana sahip cihaz uygulamaları, ekran başına en fazla bir tane olmak üzere birden çok giriş yöntemi düzenleyicisini (IME) aynı anda görüntüleyecek şekilde yapılandırılabilir. Aşağıdaki iki şekil, iki ekranda örnek bir çok oturumlu IME gösterir:
Şekil 2. çoklu oturum IME
Şekil 3. Örnek çoklu oturum IME
Destek Başına ekran odak bu özellik için bir ön koşuldur. Değilse, bu özellik etkinleştirilemez. Güvenlik kısıtlamaları nedeniyle, ekran başına odak sınırlaması bu özelliği küçük bir cihaz alt kümesiyle sınırladı.
Android 10'da, çok oturumlu IME'ler için destek, farklı bir API kümesi ve azaltılmış işlevsellik içeren ayrı sistem hizmetleriyle uygulanır. Çok oturumlu IME, mevcut IME'lerle uyumlu değildir. Çok oturumlu veya tek oturumlu hizmet kullanılabilir, ancak ikisi birden kullanılamaz.
En tepesinde yer almaktadır Android IME'ler mevcut kullanmak mümkün değildir
InputMethodService tek IME istemci aynı anda odaklanmış edilebileceği varsayımı Android 1.5 ve birçok kamu API'ler tanıtıldı Android IME API'leri önce yapıldığı için sınıfın
InputMethodService var zaten bu varsayıma büyük ölçüde güveniyordu. Ancak güncelleme
InputMethodService sınıfını çok müşterili senaryosu nedeniyle meydan okuyor desteklemek için:
- Aksi içine karmaşıklık kabul edilemez bir miktarda getirecek
InputMethodServicezaten korumak zor.
- IME geliştiricilerinin, birden fazla odaklanmış IME istemcisinden gelen paralel istekleri destekleyebilmek için uygulamalarını güncellemeleri gerekir; bu, kendi taraflarında önemsiz olmayan bir yeniden tasarım gerektirebilir (giriş kod çözücü ve yazma geçmişi veritabanı gibi).
- Çoklu IME istemcileri için gerçek kullanım durumlarının hızla gelişmesi bekleniyor, bu nedenle yeni protokol kararlı değil ve genel API'ler olarak kullanıma hazır değil.
Tek oturumda olduğu gibi (düzenli) IME, bireysel ekranlarda IME gösteren üzerinde kontrolü kullanılarak gerçekleştirilir
DisplayWindowSettings .
Bulunan bir numune çoklu oturum IME yoktur
development/samples/MultiClientInputMethod .
Çok oturumlu IME'yi test etmek için:
- Set
config_perDisplayFocusEnablediçin
true.
- Bu komutları çalıştırın:
-
$ make -j MultiClientInputMethod
-
$ adb install -r $OUT/system/priv-app/MultiClientInputMethod/MultiClientInputMethod.apk
-
$ adb root
-
$ adb shell setprop persist.debug.multi_client_ime \
com.example.android.multiclientinputmethod/.MultiClientInputMethod
-
$ adb reboot
-
- Birden çok metin girişi senaryosu deneyin.
uygulama
Bkz
MultiClientInputMethodManagerService uygulama ayrıntıları için.