以下是這些顯示器專屬區域的更新內容:
Android 10 支援在非預設螢幕上執行的應用程式使用螢幕鍵盤。
在非預設螢幕上執行的應用程式
至於要在哪個螢幕上顯示輸入法編輯器 (IME) 的螢幕鍵盤,則有不同模式。螢幕鍵盤會顯示在:
- 相同:顯示焦點應用程式的螢幕。
- 在非預設螢幕上執行焦點應用程式時,預設顯示畫面。
- 完全沒有顯示畫面。
系統會根據顯示器設定,決定要使用哪種模式。詳情請參閱:
WindowManager#setDisplayImePolicy()WindowManager#getDisplayImePolicy()

圖 1. 顯示在次要螢幕上的 IME 螢幕鍵盤,包括目標應用程式
系統會使用單一輸入法編輯器,但可根據使用者焦點在不同螢幕間切換。Android 10 會自動要求所有第一方和第三方 IME 在建立時,根據新的顯示大小修訂版面配置並調整大小。
如果螢幕 A 上有有效連線,且輸入欄位要求螢幕 B 上的輸入焦點,則會發生下列流程:
- 新的輸入連線來自顯示器 B 上的輸入欄位。
InputMethodManagerService會檢查是否應核准連線。- 選取輸入法編輯器的顯示方式。如果螢幕 B 支援顯示 IME,且允許顯示,則會使用螢幕 B。否則系統會選取主要裝置螢幕。
- 如果選取的螢幕不是螢幕 A,系統會重新建立連線。
InputMethodService會遭到刪除,然後重新建立。
安全限制
系統不會在不屬於系統的虛擬螢幕上顯示 IME。這是因為我們擔心惡意應用程式可能會建立啟用系統裝飾支援的虛擬螢幕,並從介面讀取使用者私密資訊,例如輸入預測和自訂背景。
導入作業
在 Android 9 以下版本中,IME 只能在預設畫面上使用,如「螢幕上輸入法」一文所述。在 Android 10 以上版本中,使用者可以切換焦點,在不同螢幕上的不同輸入文字欄位之間切換,輸入法編輯器視窗也會移至次要螢幕。
WindowManager 中的實作會追蹤輸入法視窗 (繪製螢幕鍵盤的輸入法編輯器視窗) 和輸入法目標 (輸入法編輯器輸入內容的視窗),以管理輸入法編輯器狀態。
對於 InputMethodManagerService (IMMS),沒有其他內建機制可將螢幕變更傳播至 InputMethodService (IMS),並在將焦點移至另一個螢幕時,於執行階段重新設定鍵盤配置。
為在螢幕之間切換 IME 視窗,Android 10 實作了下列項目:
- 現在系統會根據
DisplayContent#mInputMethodWindow和DisplayContent#mInputMethodTarget追蹤每個螢幕的 IME 和輸入目標視窗,因此 WindowManager (WM) 可以獨立管理每個螢幕的 IME 焦點狀態。 - 在 IMMS 端,當應用程式用戶端的焦點要求透過
ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus從外部螢幕收到時,系統會先取消繫結目前的輸入法服務,然後重新繫結服務,以便在onServiceConnected()中重新附加外部螢幕的新輸入法編輯器視窗權杖。 - 在 IMS 端,收到
IMS#attachToken後,會發生下列流程:ContextImpl#updateDisplay會呼叫InputMethodService#attachToken(),更新服務環境的顯示畫面。這會呼叫ViewGroup#addView(),修訂鍵盤的版面配置,並檢查目前環境,以配合目標螢幕。- 呼叫
DisplayContent#setInputMethodWindowLocked()後,實作會使用WindowProcessController將程序層級的螢幕設定變更傳送至 IME 程序,以覆寫資源和顯示指標。 - 在
onConfigurationChanged()和ViewGroup#addView()呼叫後,InputMethodService用戶端會取得正確的設定和顯示指標,重新初始化輸入檢視畫面。