Keyboard Type é uma configuração do teclado virtual no Android que define o conjunto de caracteres exibidos e o layout para um campo de entrada específico. O Android suporta muitos tipos predefinidos: text (texto padrão), number (numérico), phone (telefônico), email (com símbolo @), textPassword (para senhas), datetime e outros. Cada tipo otimiza a interface de entrada para uma tarefa específica — por exemplo, o teclado de email mostra o símbolo @ e o ponto na tela principal. De acordo com Android Developers (2026), escolher o Keyboard Type correto reduz o número de digitações em 20–40% em comparação com um teclado de texto padrão.
Principais Conclusões
Keyboard Type é determinado pelo valor do atributo android:inputType em XML ou por uma chamada programática setInputType() no código. InputType é uma máscara de bits onde a classe de entrada é combinada com flags modificadoras. As classes base são: TYPE_CLASS_TEXT para texto, TYPE_CLASS_NUMBER para números, TYPE_CLASS_PHONE para telefones, TYPE_CLASS_DATETIME para datas e horas.
Cada Keyboard Type afeta três aspectos: o layout do teclado virtual (quais caracteres são visíveis na tela principal), a filtragem de caracteres inseridos (quais caracteres são permitidos) e o comportamento de autocorreção/autocompletar. Por exemplo, o teclado numérico exibe apenas dígitos e o separador decimal, e não mostra letras mesmo se o usuário alternar maiúsculas/minúsculas. De acordo com Android Developers Documentation (2026), combinar classes com flags permite criar modos altamente especializados: texto multilinha com autocorreção, número de ponto flutuante, senha com suporte a autopreenchimento.
É importante entender que Keyboard Type é uma recomendação para o sistema de entrada (IME). Alguns teclados de terceiros (Gboard, SwiftKey) podem ignorar parcialmente o tipo especificado se o usuário configurou suas próprias preferências. No entanto, a maioria dos teclados Android padrão e o Google Gboard seguem estritamente o tipo de entrada especificado.
// Configuração programática do tipo de teclado
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL or
InputType.TYPE_NUMBER_FLAG_SIGNED
TYPE_CLASS_TEXT é a classe base para entrada de texto. Ela ativa o teclado QWERTY padrão com letras, dígitos e símbolos. A classe texto tem o maior número de modificadores que refinam o comportamento: TYPE_TEXT_FLAG_CAP_SENTENCES (letra maiúscula automática no início de uma frase), TYPE_TEXT_FLAG_AUTO_CORRECT (autocorreção), TYPE_TEXT_FLAG_MULTI_LINE (modo multilinha), TYPE_TEXT_FLAG_NO_SUGGESTIONS (desativar sugestões).
Os modificadores do teclado de texto podem ser combinados para criar configurações precisas: por exemplo, text|textCapSentences|textAutoCorrect é adequado para um campo de entrada de comentário onde são necessárias maiúscula automática e correção de erros de digitação. Enquanto text|textNoSuggestions é usado para inserir código ou termos especiais onde a autocorreção pode ser prejudicial.
De acordo com UX Stack Exchange (2025), um teclado de texto com autocorreção ativada acelera a digitação em 15–25% para o usuário médio, mas para termos técnicos (código, URL, email) é recomendado desativar a autocorreção, pois ela frequentemente substitui termos corretos por incorretos.
<!-- Text with autocorrect and capital sentences -->
android:inputType="textCapSentences|textAutoCorrect"
<!-- Text without suggestions and autocorrect -->
android:inputType="textNoSuggestions"
TYPE_CLASS_NUMBER ativa o teclado numérico, que exibe apenas dígitos, o separador decimal e o sinal de menos. Este tipo é usado para campos de entrada de quantidade, preços, idade, códigos e outros dados numéricos. O teclado numérico ocupa menos espaço na tela que um teclado de texto e elimina a entrada acidental de letras.
Number tem três modificadores: TYPE_NUMBER_FLAG_DECIMAL adiciona um ponto/vírgula decimal, TYPE_NUMBER_FLAG_SIGNED adiciona um sinal de menos para números negativos, TYPE_NUMBER_VARIATION_PASSWORD — para códigos PIN onde os dígitos são exibidos como caracteres ocultos. A combinação number|numberDecimal|numberSigned cria um campo completo para inserir números de ponto flutuante de qualquer sinal.
// Entrada numérica com ponto decimal
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Verificar número inserido
val amount = editText.text.toString().toDoubleOrNull() ?: 0.0
TYPE_CLASS_PHONE ativa o teclado telefônico, que exibe dígitos e caracteres típicos de números de telefone: +, #, *, (, ). Diferente do teclado numérico, o phone também mostra um layout de letras em um modo adicional, pois números de telefone podem conter letras (por exemplo, 1-800-FLOWERS). A classe phone não tem flags adicionais, mas suporta TYPE_TEXT_VARIATION_PHONE_ETC para inserir ramais.
TYPE_TEXT_VARIATION_EMAIL_ADDRESS ativa o teclado de email, onde o símbolo @ e o ponto estão na tela principal, e extensões de domínio comuns (.com, .net, .org) também estão disponíveis. O Gboard adicionalmente mostra botões com domínios populares ao digitar após @. O teclado de email desativa automaticamente a autocorreção, pois endereços de email podem conter combinações de caracteres não padrão.
De acordo com Google Material Design Guidelines (2025), para campos de telefone é recomendado adicionalmente especificar o atributo android:digits, que limita o conjunto de caracteres permitidos. Para campos de email, também é importante especificar autofillHints="email" para suportar autopreenchimento de gerenciadores de senhas e Google Autofill.
<!-- Email keyboard with autofill -->
android:inputType="textEmailAddress"
android:importantForAutofill="yes"
android:autofillHints="emailAddress"
<!-- Phone keyboard with digit restriction -->
android:inputType="phone"
android:digits="0123456789+"
TYPE_TEXT_VARIATION_PASSWORD e TYPE_NUMBER_VARIATION_PASSWORD são modos de entrada para dados sensíveis. Quando textPassword é definido, os caracteres inseridos são exibidos como pontos ou asteriscos (dependendo da versão do Android e do teclado). O teclado neste modo desativa a autocorreção e o salvamento de palavras inseridas no dicionário do usuário, prevenindo vazamento de senhas através de recursos de entrada preditiva.
O teclado Password também desativa a capacidade de capturar screenshots do conteúdo do campo (flag FLAG_SECURE), embora este comportamento dependa da implementação específica do teclado. A partir do Android 8.0 (API 26), teclados de senha suportam autopreenchimento através de gerenciadores de senhas se o atributo importantForAutofill="yes" estiver definido.
De acordo com Android Security Recommendations (2025), para campos de senha também é recomendado: definir maxLength para evitar senhas muito longas (que podem ser um vetor de ataque ao banco de dados), usar inputType="textPassword" junto com TextInputLayout e endIconMode="password_toggle" para que o usuário possa verificar a senha inserida antes de enviar o formulário.
<!-- Password field with show/hide icon -->
@+id/tilPasswordField
app:endIconMode="password_toggle">
@+id/etPasswordField
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />
</com.google.android.material.textfield.TextInputLayout>
A configuração programática de Keyboard Type permite mudar dinamicamente o modo do teclado dependendo do contexto ou da entrada do usuário. Por exemplo, ao alternar o tipo de campo (texto/número/data) ou ao alterar a localidade. O método setInputType() aceita uma máscara de bits InputType e atualiza imediatamente o teclado se o campo estiver em foco.
// Alternar entre entrada de texto e numérica
fun switchInputType(field: EditText, isNumeric: Boolean) {
field.inputType = if (isNumeric) {
InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
}
field.setSelection(field.text.length)
}
// Verificar se o campo é numérico
fun isNumericInput(field: EditText): Boolean {
val type = field.inputType
return (type and InputType.TYPE_MASK_CLASS) ==
InputType.TYPE_CLASS_NUMBER
}
// Verificar se a autocorreção está ativada
fun isAutoCorrectEnabled(field: EditText): Boolean {
return (field.inputType and
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) != 0
}
Perguntas Frequentes
Se inputType não for especificado, o EditText usa por padrão TYPE_CLASS_TEXT com a flag TYPE_TEXT_FLAG_MULTI_LINE. Isso significa um teclado QWERTY padrão e entrada multilinha. Para a maioria dos campos, é recomendado especificar explicitamente inputType para garantir o comportamento correto do teclado e a filtragem de caracteres.
Use o atributo android:imeOptions="actionDone" no EditText. Isso substituirá o botão Enter por um botão Concluído. Outras opções: actionSearch (lupa), actionNext (seta direita), actionSend (enviar). Trate o pressionamento via OnEditorActionListener no código.
Não é possível desativar a vibração para um campo específico — é uma configuração do sistema controlada pelo usuário nas configurações do teclado. No entanto, é possível impedir que o teclado apareça completamente definindo o atributo android:focusable="false" no EditText ou anulando a exibição através de dispatchTouchEvent.
Defina android:inputType="none" ou chame programaticamente editText.setKeyListener(null). O campo exibirá texto, mas o teclado não aparecerá ao focar. O usuário poderá selecionar e copiar texto, mas não editá-lo. Uma alternativa é usar TextView com textIsSelectable="true".
Após chamar setInputType(), é necessário mostrar o teclado novamente, pois o sistema pode não atualizar o IME automaticamente. Chame InputMethodManager.restartInput(view) para forçar uma atualização. Se o campo não estiver em foco, primeiro chame requestFocus(), depois restartInput.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também