從 Android 11 開始,鍵盤及其他輸入法編輯器 (簡稱「IME」) 可在建議列或類似容器中以內嵌方式顯示自動填入建議,而非由系統在選單中顯示這些建議。這些自動填入建議可能包含密碼或信用卡資訊等私人資料,因此在使用者選擇某項建議之前,系統會向 IME 隱藏建議。如要充分利用這項功能,請更新 IME 和自動填入服務,例如密碼管理工具。如果 IME 或自動填入服務不支援內嵌自動填入功能,選單中就會顯示建議,如同在 Android 11 以下版本中一樣。
工作流程
在這個流程中,「IME」是指目前的鍵盤或其他輸入編輯器,而「建議供應程式」則指適合該自動填入建議的供應程式。視輸入欄位和使用者設定而定,建議供應程式可能是平台或自動填入服務。
使用者著重在觸發自動填入的輸入欄位,例如密碼或信用卡輸入欄位。
平台查詢目前的 IME 和適當的建議供應程式,瞭解是否支援內嵌自動填入功能。如果 IME 或建議供應程式不支援內嵌自動填入功能,選單中就會顯示建議,如同在 Android 10 以下版本一樣。
平台要求 IME 提供「建議要求」。這個建議要求會指定最多要顯示幾項建議,並為每項建議提供「呈現規格」。呈現規格能指定大小上限、文字大小、顏色和字型資料等,讓建議供應程式符合 IME 的外觀和風格。
平台要求建議供應程式提供不超過所要求數量的建議。每一項建議都包含一個回呼,用來加載包含建議 UI 的
View
。平台向 IME 指出建議已準備就緒。IME 顯示建議時,是透過呼叫回呼方法來加載每個建議的
View
。為保護使用者的私人資訊,IME 在這個階段「無法」看見建議內容。如果使用者選取其中一項建議,系統會通知 IME,方法與使用者從系統選單中挑選建議時一樣。
以下各節說明如何設定 IME 或自動填入服務,支援內嵌自動填入功能。
設定 IME 以支援內嵌自動填入功能
本節說明如何將 IME 設定為支援內嵌自動填入功能。如果 IME 不支援內嵌自動填入功能,平台會預設在選單中顯示自動填入建議。
IME 必須將 supportsInlinedSuggestions
屬性設定為 true
:
<input-method
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsInlineSuggestions="true"/>
當平台需要自動填入建議時,會呼叫 IME 的 InputMethodService.onCreateInlineSuggestionsRequest()
方法。您必須導入這個方法。傳回指定以下各項的 InlineSuggestionsRequest
:
- IME 想要的建議數量。
每項建議的
InlinePresentationSpec
,用於定義須如何呈現建議。
平台產生建議時,會呼叫 IME 的 onInlineSuggestionsResponse()
方法,傳遞包含建議的 InlineSuggestionsResponse
。您必須實作這個方法。實作時,請呼叫 InlineSuggestionsResponse.getInlineSuggestions()
取得建議清單,然後呼叫 InlineSuggestion.inflate()
方法來加載各項建議。
設定自動填入服務以支援內嵌自動填入功能
本節說明如何設定自動填入服務,支援內嵌自動填入功能。如果應用程式不支援內嵌自動填入功能,平台會預設在選單中顯示自動填入建議。
自動填入服務必須將 supportsInlinedSuggestions
屬性設為 true
:
<autofill-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsInlineSuggestions="true"/>
如果 IME 需要自動填入建議,平台會呼叫自動填入服務的 onFillRequest()
方法,就像在 Android 11 以下版本中一樣。但您的服務必須呼叫已傳遞 FillRequest
物件的 getInlineSuggestionsRequest()
方法,才能取得 IME 建立的 InlineSuggestionsRequest
。InlineSuggestionsRequest
會指定需要多少內嵌建議,以及須如何呈現每項建議。如果 IME 不支援內嵌建議,這個方法會傳回 null
。
自動填入服務會建立多個 InlinePresentation
物件,但不超過 InlineSuggestionsRequest
所要求數量的上限。呈現方式必須遵守 InlineSuggestionsRequest
所指定的大小限制。如要將建議傳回 IME,請為每項建議呼叫 Dataset.Builder.setValue()
。Android 11 提供各版本的 Dataset.Builder.setValue()
,可支援內嵌建議。