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

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

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

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

Рисунок 1. Рукописный ввод с помощью стилуса.

EditText

Рукописный ввод стилусом по умолчанию включен для всех полей EditText на устройствах Android 14 и более поздних версиях. Режим рукописного ввода запускается для 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)
}

Ява

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 для тестирования.

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