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
de qualquer app usando uma stylus. Os campos de entrada de texto do Android, incluindo
os componentes EditText
e
os 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 que se sobrepõem a uma superfície de desenho, será necessário personalizá-lo.
EditText
A escrita à mão com a stylus está ativada por padrão para todos os campos EditText
no Android 14
e versões mais recentes. O modo de escrita à mão é iniciado para uma 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 ao redor da visualização. Ajuste os limites de escrita à mão com
setHandwritingBoundsOffsets()
.
Desative a escrita à mão com
setAutoHandwritingEnabled(false)
.
![Campo de entrada com retângulo ao redor indicando os limites para a detecção de eventos de movimento da stylus.](https://developer.android.com/static/images/develop/ui/compose/touch-input/stylus-input/shared/edittext_handwriting_bounds.png?authuser=5&hl=pt)
EditText
.
Delegação de entrada
Os apps podem mostrar elementos da interface de marcador de posição que parecem ser campos de entrada de texto, mas na verdade são apenas elementos estáticos da interface, sem recurso de entrada de texto. Os campos de pesquisa são um exemplo comum. Tocar no elemento estático da interface aciona uma transição para uma nova interface que contém um campo de entrada de texto funcional focado na entrada.
Delegação de entrada com a stylus
Use as APIs de delegação de escrita à mão para oferecer suporte à entrada de escrita à mão da stylus em
campos de entrada de marcadores de posição (consulte
setHandwritingDelegatorCallback()
e
setIsHandwritingDelegate()
).
O elemento da interface de marcador é 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 do marcador invoca o callback.
O callback aciona a transição da interface para mostrar e focar o campo de entrada
funcional. Normalmente, a implementação de callback é igual à implementação
de um listener de clique no elemento de marcador. Quando o campo de entrada funcional
cria um
InputConnection
,
o modo de escrita à mão da stylus é iniciado.
Material Design
A biblioteca
com.google.android.material.search
fornece as classes
SearchBar
e
SearchView
para facilitar a implementação do padrão de interface de marcadores.
As visualizações de marcador e de pesquisa funcional estão vinculadas a
setUpWithSearchBar()
.
A delegação de escrita à mão é configurada na biblioteca Material sem necessidade de desenvolvimento extra no app.
Sobreposição com superfícies de desenho
Caso seu app tenha uma superfície de desenho com um campo de texto sobreposto a ela, pode ser
necessário desativar a escrita à mão da stylus para permitir que o usuário desenhe. Consulte
setAutoHandwritingEnabled()
.
Testes
A escrita à mão com a stylus pode ser usada em dispositivos Android 14 e versões mais recentes que tenham um dispositivo de entrada com stylus compatível e um editor de método de entrada (IME, na sigla em inglês) que oferece suporte às APIs de escrita à mão da stylus do Android 14.
Se você não tiver um dispositivo de entrada da stylus, simule a entrada em qualquer dispositivo com acesso raiz (incluindo emuladores) usando estes 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 o Gboard Beta para testes se você estiver usando um dispositivo que não oferece suporte à stylus.
Outros recursos
- Material Design: campos de texto (link em inglês)
- Editores de texto personalizados