Entrada da stylus em campos de texto

Testar o Compose
O Jetpack Compose é o kit de ferramentas de interface recomendado para Android. Aprenda a trabalhar com uma stylus no Compose.

O Android 14 (nível 34 da API) e versões mais recentes permitem que os usuários escrevam em qualquer campo de entrada de texto em qualquer app usando uma stylus. Os campos de entrada de texto do Android, incluindo componentes EditText e widgets de texto WebView, oferecem suporte à entrada da stylus por padrão.

No entanto, se o app exigir campos de entrada de texto personalizados (consulte Editores de texto personalizados) ou tiver um layout complexo com campos de entrada de texto sobrepostos a uma superfície de desenho, será necessário personalizar o app.

Figura 1. Entrada manuscrita com uma stylus.

EditText

A escrita à mão com a stylus está ativada para todos os campos EditText por padrão no Android 14 e versões mais recentes. O modo de escrita à mão é iniciado para um EditText quando um evento de movimento da stylus é detectado dentro dos limites de escrita à mão da visualização.

Os limites de escrita à mão incluem 40 dp de padding vertical e 10 dp de padding horizontal em torno da visualização. Ajuste os limites de escrita à mão com setHandwritingBoundsOffsets(). Desative a escrita à mão com setAutoHandwritingEnabled(false).

Campo de entrada com um retângulo ao redor indicando os limites para a detecção de eventos de movimento da stylus.
Figura 2. Limites de escrita à mão dos campos EditText.

Delegação de entrada

Os apps podem mostrar elementos de marcador de posição da interface que parecem ser campos de entrada de texto, mas na verdade são apenas elementos estáticos da interface sem capacidade de entrada de texto. Os campos de pesquisa são um exemplo comum. Tocar no elemento da interface estática aciona uma transição para uma nova interface que contém um campo de entrada de texto funcional focado para entrada.

Figura 3. Delegação de entrada do elemento da interface estática para o campo de entrada de texto.

Delegação de entrada da stylus

Use as APIs de delegação de escrita à mão para oferecer suporte à entrada de escrita à mão com stylus para campos de entrada de marcador de posição (consulte setHandwritingDelegatorCallback() e setIsHandwritingDelegate()). O elemento de interface do marcador de posição é configurado para delegar a escrita à mão a um campo de entrada funcional, por exemplo:

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

O movimento da stylus sobre a visualização do campo de entrada de texto de marcador de posição invoca o callback. O callback aciona a transição da interface para mostrar e focar o campo de entrada funcional. A implementação do callback normalmente é igual à implementação de um listener de clique no elemento de marcador de posição. Quando o campo de entrada funcional cria um InputConnection, o modo de escrita com stylus é iniciado.

Figura 4. Delegação de entrada da stylus do elemento da interface estática para o campo de entrada de texto.

Material Design

A biblioteca com.google.android.material.search oferece as classes SearchBar e SearchView para facilitar a implementação do padrão de IU de marcador de posição.

Os marcadores de posição e as visualizações de pesquisa funcional estão vinculadas a setUpWithSearchBar().

A delegação de escrita à mão é configurada na biblioteca Material sem a necessidade de desenvolvimento extra no app.

Sobreposição com superfícies de desenho

Se o app tiver uma superfície de desenho com um campo de texto sobreposto, talvez seja necessário desativar a escrita à mão com stylus para permitir que o usuário desenhe. Consulte setAutoHandwritingEnabled().

Teste

A escrita com stylus tem suporte no Android 14 e em versões mais recentes com um dispositivo de entrada de stylus compatível e um editor de método de entrada (IME) que oferece suporte às APIs de escrita com stylus do Android 14.

Se você não tiver um dispositivo de entrada de stylus, simule a entrada de stylus em qualquer dispositivo com acesso raiz (incluindo emuladores) usando os seguintes comandos do 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

Use a versão Beta do Gboard para testar se você estiver usando um dispositivo que não oferece suporte à stylus.

Outros recursos