Ввод стилусом в текстовые поля

Попробуйте способ создания композиций.
Jetpack Compose — это рекомендуемый набор инструментов для создания пользовательского интерфейса для Android. Узнайте, как работать со стилусом в Compose.

Android 14 (уровень API 34) и выше позволяют пользователям вводить текст в любое текстовое поле ввода в любом приложении с помощью стилуса. Поля ввода текста в Android, включая компоненты EditText и текстовые виджеты WebView , по умолчанию поддерживают ввод с помощью стилуса.

Однако, если ваше приложение требует настраиваемых текстовых полей ввода (см. раздел «Настраиваемые текстовые редакторы ») или имеет сложную структуру с текстовыми полями ввода, наложенными на поверхность для рисования, вам потребуется настроить приложение.

Рисунок 1. Ввод текста от руки с помощью стилуса.

EditText

В Android 14 и выше рукописный ввод с помощью стилуса включен по умолчанию для всех полей EditText . Режим рукописного ввода запускается для поля EditText при обнаружении события движения стилуса в пределах границ поля ввода.

Границы рукописного ввода включают 40 dp вертикального отступа и 10 dp горизонтального отступа вокруг области просмотра. Настройте границы рукописного ввода с помощью setHandwritingBoundsOffsets() . Отключите рукописный ввод с помощью setAutoHandwritingEnabled(false) .

Поле ввода с окружающим прямоугольником, указывающим границы зоны обнаружения событий движения стилуса.
Рисунок 2. Границы полей EditText для рукописного ввода.

Делегирование ввода

В приложениях могут отображаться элементы пользовательского интерфейса-заглушки, которые выглядят как текстовые поля ввода, но на самом деле являются просто статическими элементами интерфейса без возможности ввода текста. Поля поиска — распространенный пример. Нажатие на статический элемент интерфейса запускает переход к новому интерфейсу, содержащему функциональное текстовое поле ввода, которое находится в фокусе для ввода данных.

Рисунок 3. Передача ввода от статического элемента пользовательского интерфейса к текстовому полю ввода.

Делегирование ввода стилуса

Используйте API делегирования рукописного ввода для поддержки ввода рукописного текста с помощью стилуса для полей ввода-заполнителей (см. setHandwritingDelegatorCallback() и setIsHandwritingDelegate() ). Элемент пользовательского интерфейса-заполнитель настроен на делегирование рукописного ввода функциональному полю ввода, например:

Котлин

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback {
        showAndFocusDelegateInputField()
    }
    delegateInputField.setIsHandwritingDelegate(true)
}

Java

if (Build.VERSION.SDK_INT >= 34) {
    placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate);
    delegateInputField.setIsHandwritingDelegate(true);
}

Движение стилуса над полем ввода текста-заполнителя вызывает функцию обратного вызова. Эта функция запускает переход пользовательского интерфейса для отображения и фокусировки функционального поля ввода. Реализация функции обратного вызова обычно аналогична реализации обработчика клика по элементу-заполнителю. Когда функциональное поле ввода создает объект InputConnection , запускается режим рукописного ввода с помощью стилуса.

Рисунок 4. Передача ввода с помощью стилуса от статического элемента пользовательского интерфейса к полю ввода текста.

Материальный дизайн

Библиотека com.google.android.material.search предоставляет классы SearchBar и SearchView для упрощения реализации шаблона пользовательского интерфейса с использованием заполнителей.

Заполнители и функциональные поля поиска связаны функцией setUpWithSearchBar() .

Делегирование рукописного ввода настраивается в библиотеке Material, и в вашем приложении не требуется дополнительная разработка.

Перекрытие с поверхностями для рисования

Если в вашем приложении есть поверхность для рисования, на которую наложено текстовое поле, вам может потребоваться отключить рукописный ввод с помощью стилуса, чтобы разрешить пользователю рисовать. См. setAutoHandwritingEnabled() .

Тестирование

Поддержка рукописного ввода с помощью стилуса доступна на устройствах Android 14 и выше, имеющих совместимое устройство ввода со стилусом и редактор методов ввода (IME), поддерживающий API рукописного ввода Android 14.

Если у вас нет устройства ввода со стилусом, имитируйте ввод со стилуса на любом устройстве с root-доступом (включая эмуляторы), используя следующие команды Android Debug Bridge (adb):


// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start

// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true

Если вы используете устройство, не поддерживающее стилус, воспользуйтесь бета-версией Gboard для тестирования.

Дополнительные ресурсы