Input stilo nei campi di testo

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

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 è attiva per tutti i campi EditText per impostazione predefinita su Android 14 e versioni successive. La modalità Scrittura a mano libera viene avviata per un EditText quando viene rilevato un evento di movimento dello stilo all'interno dei limiti di scrittura a mano libera della vista.

I limiti di scrittura a mano libera includono 40 dp di spaziatura interna verticale e 10 dp di spaziatura interna orizzontale nella visualizzazione. Regola i limiti della scrittura a mano libera 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 di eventi di movimento dello stilo.
Figura 2. Limiti della scrittura a mano libera di EditText campi.

Delega input

Le app possono visualizzare elementi UI segnaposto che sembrano campi di immissione testo, ma in realtà sono solo elementi statici dell'interfaccia utente senza funzionalità di immissione testo. I campi di ricerca ne sono un esempio comune. Se tocchi un elemento UI statico, viene attivata una transizione a una nuova UI contenente un campo di immissione testo funzionale.

Figura 3. Delega di input da elemento UI statico al campo di immissione testo.

Delega input stilo

Utilizza le API di delega della scrittura a mano libera per supportare l'inserimento della scrittura a mano libera con lo stilo per i campi di immissione segnaposto (vedi setHandwritingDelegatorCallback() e setIsHandwritingDelegate()). L'elemento UI 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 dello stilo sopra la visualizzazione del campo di immissione del testo del segnaposto richiama il callback. Il callback attiva la transizione dell'interfaccia utente per mostrare e impostare lo stato attivo sul campo di input funzionale. L'implementazione del callback corrisponde di solito all'implementazione di un listener di clic sull'elemento segnaposto. Quando il campo di immissione funzionale crea un elemento InputConnection, viene avviata la modalità di scrittura a mano libera con lo stilo.

Figura 4. Delega di input dello stilo da un elemento UI statico a un campo di immissione di testo.

Material Design

La libreria com.google.android.material.search fornisce le classi SearchBar e SearchView per facilitare l'implementazione del pattern UI segnaposto.

Le viste della ricerca funzionali e dei segnaposto sono collegate a setUpWithSearchBar().

La delega della scrittura a mano libera è configurata nella libreria dei materiali e non sono necessari ulteriori sviluppi nell'app.

Sovrapposizione con superfici di disegno

Se l'app ha una superficie di disegno a cui è sovrapposto un campo di testo, potrebbe essere necessario disattivare la scrittura a mano libera con lo stilo per consentire all'utente di disegnare. Consulta la pagina setAutoHandwritingEnabled().

Test

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

Se non hai un dispositivo di input con lo stilo, simula l'input dello 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

Usa la versione beta di Gboard per eseguire test se usi un dispositivo che non supporta lo stilo.

Risorse aggiuntive