Entrada da stylus em campos de texto

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

No entanto, caso seu app exija campos de entrada de texto personalizados (consulte Texto personalizado editores) ou tem um layout complexo com campos de entrada de texto sobrepondo uma superfície de desenho, precisam personalizar seu app.

Figura 1. Entrada escrita à mão com uma stylus.

EditText

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

Os limites da escrita à mão incluem 40 dp de padding vertical e 10 dp de horizontal. padding ao redor da visualização. Ajuste os limites da escrita à mão com setHandwritingBoundsOffsets() Desativar 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 de campos EditText.

Delegação de entrada

Os aplicativos podem exibir elementos de IU de espaço reservado que parecem ser campos de entrada de texto, mas são, na verdade, apenas elementos estáticos de IU sem capacidade de entrada de texto. Pesquisa são um exemplo comum. Tocar no elemento estático da interface do usuário aciona uma transição para uma nova IU com um campo de entrada de texto funcional focado para entrada.

Figura 3. Delegação de entrada do elemento estático da interface 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 os campos de entrada do marcador de posição (consulte a seção setHandwritingDelegatorCallback() e setIsHandwritingDelegate()). O elemento da interface de marcador é configurado para delegar a escrita à mão a um campo de entrada, 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 do marcador de posição invoca o callback. O callback aciona a transição da interface para mostrar e focar a entrada funcional . Em geral, a implementação do callback é igual à implementação para um listener de clique no elemento marcador de posição. Quando o campo de entrada funcional cria um InputConnection, O modo de escrita à mão com a stylus será iniciado.

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

Material Design

A com.google.android.material.search oferece os SearchBar e SearchView turmas para facilitar a implementação do padrão de interface de marcador de posição.

O marcador de posição e as visualizações de pesquisa funcionais estão vinculadas a setUpWithSearchBar()

A delegação de escrita à mão é configurada na biblioteca do Material sem o desenvolvimento necessário no app.

Sobrepor com superfícies de desenho

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

Teste

A escrita à mão com a stylus pode ser usada em dispositivos Android 14 e mais recentes com uma dispositivo de entrada da stylus compatível e um método de entrada Editor (IME) que oferece suporte às APIs de escrita à mão da stylus do Android 14.

Se você não tiver um dispositivo de entrada com uma stylus, simule a entrada dela em qualquer dispositivo com acesso root (incluindo emuladores) usando o seguinte comando 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 o Gboard Beta para testes se você estiver usando um dispositivo sem suporte. stylus.

Outros recursos