Начиная с Android 11, клавиатуры и другие редакторы методов ввода ( IME ) могут отображать предложения автозаполнения в строке, в строке предложений или аналогичном виде вместо системного отображения предложений в меню. Поскольку эти предложения автозаполнения могут содержать конфиденциальные данные, такие как пароли или данные кредитных карт, они скрыты от IME до тех пор, пока пользователь не выберет один из них. Обновите IME и службы автозаполнения, такие как менеджеры паролей, чтобы использовать эту функцию. Если IME или служба автозаполнения не поддерживают встроенное автозаполнение, предложения отображаются в меню, как в версиях до Android 11 .
Рабочий процесс
В этом случае IME означает текущую клавиатуру или другой редактор ввода, а поставщик подсказок — соответствующий поставщик подсказок для автозаполнения. В зависимости от поля ввода и настроек пользователя поставщиком подсказок может быть платформа или служба автозаполнения.
Пользователь фокусируется на поле ввода, которое запускает автозаполнение, например, поле ввода пароля или данных кредитной карты.
Платформа запрашивает текущий редактор метода ввода (IME) и соответствующий поставщик подсказок, чтобы узнать, поддерживают ли они встроенное автозаполнение. Если IME или поставщик подсказок не поддерживают встроенное автозаполнение, подсказка отображается в меню, как на Android 10 и ниже.
Платформа запрашивает у редактора метода ввода (IME) запрос на предложение . В этом запросе указывается максимальное количество отображаемых предложений, а также характеристики представления каждого предложения. Характеристики представления включают такие параметры, как максимальный размер, размер текста, цвета и шрифты, что позволяет поставщику предложений адаптировать внешний вид редактора метода ввода (IME).
Платформа запрашивает у поставщика предложений указанное количество предложений. Каждое предложение включает обратный вызов для создания
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"/>
Когда платформе требуется вариант автозаполнения, она вызывает метод InputMethodService.onCreateInlineSuggestionsRequest()
вашего редактора метода ввода (IME). Этот метод необходимо реализовать. Возвращает запрос InlineSuggestionsRequest
, указав следующее:
- Сколько предложений требуется вашему редактору метода ввода?
InlinePresentationSpec
для каждого предложения, определяющий, как предложение должно быть представлено.
Когда платформа получает предложения, она вызывает метод onInlineSuggestionsResponse()
вашего редактора метода ввода (IME), передавая 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. Однако ваша служба должна вызвать метод getInlineSuggestionsRequest()
переданного объекта FillRequest
, чтобы получить InlineSuggestionsRequest
, созданный IME. InlineSuggestionsRequest
определяет необходимое количество встроенных вариантов и способ отображения каждого из них. Если IME не поддерживает встроенные варианты, метод возвращает null
.
Ваша служба автозаполнения создаёт объекты InlinePresentation
, количество которых не превышает максимального значения, запрошенного в InlineSuggestionsRequest
. Ваши презентации должны соответствовать ограничениям по размеру, заданным в InlineSuggestionsRequest
. Чтобы вернуть ваши предложения в редактор метода ввода (IME), вызовите Dataset.Builder.setValue()
один раз для каждого предложения. В Android 11 предусмотрены версии Dataset.Builder.setValue()
для поддержки встроенных предложений.