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

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

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