Input stilo nei campi di testo

Prova la funzionalità Scrivi
Jetpack Compose è il toolkit per l'interfaccia utente consigliato per Android. Scopri come utilizzare uno stilo in Scrivi.

Android 14 (livello API 34) e versioni successive consentono agli utenti di scrivere in qualsiasi campo di immissione di testo in qualsiasi app utilizzando uno stilo. I campi di immissione di testo di Android, inclusi i componenti EditText e i widget di testo WebView, supportano per impostazione predefinita l'input con lo stilo.

Tuttavia, se la tua app richiede campi di immissione di testo personalizzati (vedi Editor di testo personalizzati) o ha un layout complesso con campi di immissione di testo sovrapposti a una superficie di disegno, dovrai personalizzare l'app.

Figura 1. Input scritto a mano con uno stilo.

EditText

La scrittura a mano libera con lo stilo è attivata per tutti i campi EditText per impostazione predefinita su Android 14 e versioni successive. La modalità di scrittura a mano viene avviata per un EditText quando viene rilevato un evento di movimento dello stilo all'interno dei limiti di scrittura a mano della visualizzazione.

I limiti della scrittura a mano includono un'area di 40 dp di spaziatura verticale e 10 dp di spaziatura orizzontale intorno alla visualizzazione. Regola i limiti della scrittura a mano con setHandwritingBoundsOffsets(). Disattiva la scrittura a mano libera con setAutoHandwritingEnabled(false).

Campo di immissione con un rettangolo circostante che indica i limiti per il rilevamento degli eventi di movimento dello stilo.
Figura 2. Limiti di scrittura a mano libera dei campi EditText.

Delega dell'input

Le app possono mostrare elementi dell'interfaccia utente segnaposto che sembrano essere campi di immissione di testo, ma in realtà sono solo elementi dell'interfaccia utente statici senza funzionalità di immissione di testo. I campi di ricerca sono un esempio comune. Toccando l'elemento dell'interfaccia utente statica si attiva una transizione a una nuova interfaccia utente contenente un campo di immissione di testo funzionale attivo per l'inserimento.

Figura 3. Delega dell'input dall'elemento dell'interfaccia utente statico al campo di immissione di testo.

Delega dell'input con lo stilo

Utilizza le API di delega della scrittura a mano libera per supportare l'input a mano libera con lo stilo per i campi di immissione segnaposto (vedi setHandwritingDelegatorCallback() e setIsHandwritingDelegate()). L'elemento dell'interfaccia utente segnaposto è configurato per delegare la scrittura a mano libera a un campo di immissione funzionale, ad esempio:

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);
}

Il movimento del pennino sulla visualizzazione del campo di immissione del testo segnaposto richiama il callback. Il callback attiva la transizione dell'interfaccia utente per mostrare e mettere a fuoco il campo di input funzionale. L'implementazione del callback è in genere la stessa dell'implementazione per un listener di clic sull'elemento segnaposto. Quando il campo di immissione funzionale crea un InputConnection, viene avviata la modalità di scrittura a mano libera con lo stilo.

Figura 4. Delega dell'input dello stilo dall'elemento dell'interfaccia utente statico al campo di immissione di testo.

Material Design

La libreria com.google.android.material.search fornisce le classi SearchBar e SearchView per semplificare l'implementazione del pattern dell'interfaccia utente del segnaposto.

Le visualizzazioni di ricerca con segnaposto e funzionali sono collegate a setUpWithSearchBar().

La delega della scrittura a mano è configurata nella libreria Material senza dover sviluppare ulteriormente l'app.

Sovrapposizione con le superfici di disegno

Se la tua app ha una superficie di disegno con un campo di testo sovrapposto, potresti dover disattivare la scrittura a mano libera con lo stilo per consentire all'utente di disegnare. Consulta setAutoHandwritingEnabled().

Test

La scrittura a mano con lo stilo è supportata sui dispositivi con Android 14 e versioni successive con un dispositivo di input con stilo compatibile e un editor di metodi di input (IME) che supporta le API di scrittura a mano con lo stilo di Android 14.

Se non hai un dispositivo di input con stilo, simula l'input con stilo su qualsiasi dispositivo con accesso root (inclusi gli emulatori) utilizzando i seguenti comandi 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

Utilizza la versione beta di Gboard per i test se utilizzi un dispositivo che non supporta lo stilo.

Risorse aggiuntive