На устройствах с Android 14 (уровень API 34) и более поздними версиями пользователи могут вводить текст стилусом в любом поле ввода в любом приложении. Поля для ввода текста в Android, включая компоненты EditText и текстовые виджеты WebView, по умолчанию поддерживают ввод с помощью стилуса.
Однако если в вашем приложении есть настраиваемые поля ввода текста (см. раздел Пользовательские текстовые редакторы) или сложный макет с полями ввода текста, наложенными на область рисования, вам потребуется настроить приложение.
EditText
На устройствах с Android 14 и более поздними версиями рукописный ввод стилусом по умолчанию включен для всех полей EditText. Режим рукописного ввода запускается для EditText, когда в границах рукописного ввода обнаруживается событие движения стилуса.
Границы рукописного ввода включают 40 dp вертикального отступа и 10 dp горизонтального отступа вокруг представления. Настройте границы рукописного ввода с помощью setHandwritingBoundsOffsets().
Отключите рукописный ввод с помощью setAutoHandwritingEnabled(false).
EditText.
Делегирование ввода
В приложениях могут быть элементы интерфейса, которые выглядят как поля ввода текста, но на самом деле являются статическими элементами без возможности ввода текста. Распространенный пример – поля поиска. При нажатии на статический элемент интерфейса открывается новый интерфейс с функциональным полем ввода текста, на котором установлен фокус.
Делегирование ввода с помощью стилуса
Используйте API делегирования рукописного ввода, чтобы поддерживать рукописный ввод стилусом для полей ввода плейсхолдеров (см. setHandwritingDelegatorCallback() и setIsHandwritingDelegate()). Элемент интерфейса плейсхолдера настроен на делегирование рукописного ввода функциональному полю ввода, например:
Kotlin
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, запускается режим рукописного ввода стилусом.
Material Design
Библиотека 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.
Дополнительные ресурсы
- Material Design – текстовые поля
- Специальные текстовые редакторы