Update yang dilakukan pada area khusus tampilan ini disediakan di bawah:
Android 10 mendukung keyboard virtual untuk aplikasi yang berjalan di tampilan non-default.
Aplikasi yang berjalan di tampilan non-default
Terkait tampilan yang menampilkan keyboard virtual Editor Metode Input (IME), ada berbagai mode. Keyboard virtual ditampilkan di:
- Tampilan yang sama dengan tampilan aplikasi yang difokuskan.
- Tampilan default saat aplikasi yang difokuskan berjalan di tampilan non-default.
- Tidak ada tampilan sama sekali.
Sistem menentukan mode yang akan digunakan berdasarkan setelan tampilan tempat aplikasi yang difokuskan muncul. Untuk mengetahui detail selengkapnya, lihat:
WindowManager#setDisplayImePolicy()WindowManager#getDisplayImePolicy()

Gambar 1. Keyboard virtual IME seperti yang muncul di tampilan sekunder, termasuk aplikasi target
Sistem menggunakan satu IME, tetapi dapat beralih antar-tampilan untuk mengikuti fokus pengguna. Android 10 secara otomatis mengharapkan semua IME pihak pertama dan ketiga merevisi tata letak dan mengubah ukuran sesuai dengan ukuran tampilan baru saat dibuat.
Jika ada koneksi aktif di tampilan A, dan kolom input meminta fokus input di tampilan B, alur berikut akan terjadi:
- Koneksi input baru berasal dari kolom input di tampilan B.
InputMethodManagerServicememeriksa apakah koneksi harus disetujui.- Tampilan dipilih untuk IME. Jika tampilan B mendukung tampilan IME dan diizinkan untuk menampilkannya, B akan digunakan. Jika tidak, tampilan perangkat utama akan dipilih.
- Jika tampilan yang dipilih bukan dari tampilan A, koneksi akan dibuat ulang.
InputMethodServicedihancurkan, lalu dibuat lagi.
Batasan keamanan
Sistem tidak akan menampilkan IME di tampilan virtual yang bukan milik sistem. Hal ini disebabkan oleh masalah keamanan bahwa aplikasi berbahaya dapat membuat tampilan virtual dengan dukungan dekorasi sistem yang diaktifkan dan membaca informasi sensitif pengguna dari platform, seperti prediksi pengetikan dan latar belakang kustom.
Penerapan
Di Android 9 (dan yang lebih lama), IME hanya tersedia di layar default, seperti yang dijelaskan dalam Metode Input di Layar. Di Android 10 (dan yang lebih baru), pengguna dapat beralih antar-kolom teks input yang berbeda di tampilan yang berbeda dengan beralih fokus, dan jendela IME akan berpindah ke tampilan sekunder.
Implementasi di WindowManager melacak jendela metode input (jendela IME tempat keyboard virtual digambar) dan target metode input (jendela tempat input IME masuk) untuk mengelola status IME.
Untuk InputMethodManagerService (IMMS), tidak ada mekanisme bawaan lain yang dapat menyebarkan perubahan tampilan ke InputMethodService (IMS) dan mengonfigurasi ulang tata letak keyboard saat runtime saat memindahkan fokus ke tampilan lain.
Untuk mencapai peralihan jendela IME antar-tampilan, Android 10 menerapkan hal berikut:
- Jendela target IME dan input kini dilacak per tampilan di
DisplayContent#mInputMethodWindowdanDisplayContent#mInputMethodTarget, sehingga WindowManager (WM) dapat mengelola status fokus IME secara independen dari setiap tampilan. - Di sisi IMMS, saat permintaan fokus klien aplikasi dari tampilan eksternal
diterima melalui
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus, layanan metode input saat ini akan dilepas terlebih dahulu, lalu layanan akan diikat kembali untuk melampirkan token jendela IME baru untuk tampilan eksternal dionServiceConnected(). - Di sisi IMS, setelah
IMS#attachTokenditerima, alur berikut akan terjadi:ContextImpl#updateDisplaydipanggil untuk memperbarui tampilan konteks layanan diInputMethodService#attachToken(). Tindakan ini memanggilViewGroup#addView()untuk merevisi tata letak keyboard dan beradaptasi dengan tampilan target yang memeriksa konteks saat ini.- Setelah
DisplayContent#setInputMethodWindowLocked()dipanggil, implementasi akan mengirimkan perubahan konfigurasi tampilan tingkat proses menggunakanWindowProcessControllerke proses IME untuk mengganti metrik resource dan tampilan. - Klien
InputMethodServicemendapatkan konfigurasi yang benar dengan metrik tampilan yang benar setelahonConfigurationChanged()dan panggilanViewGroup#addView()untuk menginisialisasi ulang tampilan input.