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

Библиотека Jetpack androidx.compose.material3 позволяет пользователям писать в любом компоненте TextField в любом приложении с помощью стилуса.

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

Чтобы включить ввод с помощью стилуса по умолчанию, добавьте зависимость библиотеки в файл build.gradle вашего приложения:

Котлин

dependencies {
    implementation("androidx.compose.foundation:foundation:LATEST_COMPOSE_VERSION")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "LATEST_EXTENSION_VERSION"
    }

    kotlinOptions {
        jvmTarget = "LATEST_JVM_VERSION"
    }
}

Круто

dependencies {
    implementation 'androidx.compose.foundation:foundation:LATEST_COMPOSE_VERSION'
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = 'LATEST_EXTENSION_VERSION'
    }

    kotlinOptions {
        jvmTarget = 'LATEST_JVM_VERSION'
    }
}

TextField

Рукописный ввод стилусом по умолчанию включен для всех компонентов TextField в Android 14 и более поздних версиях, а также в зависимости androidx.compose.foundation:foundation:1.7.0 . Режим рукописного ввода запускается для TextField при обнаружении движения стилуса в пределах области рукописного ввода компонента.

Границы рукописного ввода включают 40 dp вертикального отступа и 10 dp горизонтального отступа вокруг поля ввода.

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

Рукописный ввод с помощью стилуса не поддерживается для полей TextField , если редактор метода ввода запрашивается с помощью KeyboardType.Password .

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

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

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

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

Используйте API делегирования рукописного ввода для поддержки рукописного ввода стилусом в полях-заполнителях (см. handwritingDetector и handwritingHandler ). Элемент пользовательского интерфейса-заполнителя настроен на делегирование рукописного ввода в функциональное поле ввода. Пример реализации см. в разделе HandwritingDetectorSample.kt .

Режим рукописного ввода стилусом запускается, когда функциональное поле ввода получает фокус и создает InputConnection .

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

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

Рукописный ввод с помощью стилуса поддерживается на устройствах 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 для тестирования.

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