Entrada de la pluma stylus en los campos de texto

El jetpack androidx.compose.material3 permite a los usuarios escribir en cualquier componente TextField en cualquier app que use una pluma stylus.

Figura 1: Entrada de escritura a mano con una pluma stylus.

Para habilitar la entrada de la pluma stylus de forma predeterminada, agrega la dependencia de la biblioteca al directorio Archivo 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"
    }
}

Groovy

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

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = 'LATEST_EXTENSION_VERSION'
    }

    kotlinOptions {
        jvmTarget = 'LATEST_JVM_VERSION'
    }
}

TextField

La escritura a mano con la pluma stylus está habilitada de forma predeterminada para todos los componentes de TextField Android 14 y versiones posteriores androidx.compose.foundation:foundation:1.7.0 dependencia. Se inicia el modo de escritura a mano para una TextField cuando se activa un movimiento de la pluma stylus si se detecta un evento dentro de los límites de escritura a mano del componente.

Los límites de escritura a mano incluyen 40 dp de padding vertical y 10 dp de padding horizontal. relleno alrededor del campo de entrada.

Campo de entrada con el rectángulo alrededor que indica los límites para la detección de eventos de movimiento de la pluma stylus.
Figura 2: Límites de escritura a mano de componentes de TextField.

La escritura a mano con la pluma stylus no es compatible con los campos TextField cuando se usa el método de entrada editor se solicita con KeyboardType.Password.

Delegación de entrada

Las apps pueden mostrar elementos de la IU de marcador de posición que parecen ser campos de entrada de texto, pero en realidad son solo elementos estáticos de la IU sin capacidad de entrada de texto. Búsqueda son un ejemplo común. Cuando se presiona el elemento estático de la IU, se activa una transición a una nueva IU que contiene un campo de entrada de texto funcional enfocado en la entrada.

Figura 3: Delegación de entrada del elemento estático de la IU al campo de entrada de texto.

Delegación de entrada de la pluma stylus

Usa las APIs de delegación de escritura a mano para admitir la entrada de escritura a mano con pluma stylus para de entrada de marcador de posición (consulta handwritingDetector y handwritingHandler). El elemento de marcador de posición de la IU es que está configurada para delegar la escritura a mano a un campo de entrada funcional. Por ejemplo para la implementación, consulta HandwritingDetectorSample.kt

El modo de escritura a mano con la pluma stylus comienza cuando el campo de entrada funcional se enfoca y crea un InputConnection

Figura 4: Delegación de entrada de la pluma stylus del elemento estático de la IU al campo de entrada de texto.

Prueba

La escritura a mano con la pluma stylus es compatible con dispositivos Android 14 y versiones posteriores que tengan un un dispositivo de entrada con pluma stylus compatible y un método de entrada de seguridad (IME) que admite las APIs de escritura a mano con pluma stylus de Android 14.

Si no tienes un dispositivo de entrada con pluma stylus, simula una entrada de pluma stylus en cualquier dispositivo con acceso con permisos de administrador (incluidos los emuladores) mediante 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

Usa la versión beta de Gboard para realizar pruebas si usas un dispositivo que no es compatible pluma stylus.

Recursos adicionales