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

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

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

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

Kotlin

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.

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