將自動填入功能與輸入法編輯器和自動填入服務整合

從 Android 11 版開始,鍵盤及其他輸入法編輯器 (簡稱「IME」) 可在建議列或類似容器中以內嵌方式顯示自動填入建議,而不用讓系統在選單中顯示這些建議。這些自動填入建議可能包含密碼或信用卡資訊等私人資料,因此在使用者選擇某項建議之前,系統會向 IME 隱藏建議。如要充分利用這項功能,請更新 IME 和自動填入服務 (例如密碼管理工具)。如果 IME 或自動填入服務不支援內嵌自動填入功能,選單中就會顯示建議,就像在 Android 11 以下版本中一樣。

作業流程

在這個流程中,「IME」是指目前的鍵盤或其他輸入編輯器,而「建議供應程式」則指該自動填入建議的對應供應程式。根據輸入欄位和使用者設定,建議供應程式可能是平台或自動填入服務。

  1. 使用者聚焦在觸發自動填入的輸入欄位,例如密碼或信用卡輸入欄位。

  2. 平台查詢目前的 IME 和適當的建議供應程式,看看是否可支援內嵌自動填入功能。如果 IME 或建議供應程式不支援內嵌自動填入功能,選單中就會顯示建議,就像在 Android 10 以下版本一樣。

  3. 平台要求 IME 提供「建議要求」。這個建議要求會指定最多要顯示幾項建議,也為每項建議提供「呈現規格」。呈現規格能指定大小上限、文字大小、顏色和字型資料等,可讓建議供應程式符合 IME 的外觀和風格。

  4. 平台要求建議供應程式提供不超過要求的建議數量。每一項建議都包含一個回呼,以加載包含建議 UI 的 View

  5. 平台向 IME 指出建議已準備就緒。IME 顯示建議的方法是透過呼叫回呼方法加載每個建議的 View。為了保護使用者的私人資訊,IME 在這個階段「無法」看見建議的內容。

  6. 如果使用者選取其中一項建議,系統會通知 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

  • 輸入法編輯器需要多少建議。
  • 每項建議的 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 建立的 InlineSuggestionsRequestInlineSuggestionsRequest 會指定需要多少內嵌建議,以及須如何呈現每項建議。如果 IME 不支援內嵌建議,這個方法會傳回 null

自動填入服務會建立 InlinePresentation 物件,不超過 InlineSuggestionsRequest 中所要求的數量上限。呈現方式必須遵守 InlineSuggestionsRequest 所指定的大小限制。如要將建議傳回 IME,請針對每項建議呼叫 Dataset.Builder.setValue()。Android 11 提供新版 Dataset.Builder.setValue(),可支援內嵌建議。