InputType é um atributo do Android que determina a natureza dos dados de entrada e o comportamento do teclado para campos de texto. O valor InputType é uma máscara de bits que combina a classe de entrada (texto, número, telefone, data) e modificadores (multilinha, autocorreção, maiúsculas, entrada oculta). O InputType afeta o tipo de teclado exibido, a filtragem de caracteres de entrada e o comportamento de preenchimento automático. De acordo com Android Developers (2026), o InputType é um dos atributos mais importantes para garantir a entrada correta de dados e deve ser definido explicitamente para cada campo de texto editável.
Principais conclusões
InputType é uma constante inteira (Int) que codifica o modo de entrada para um campo de texto. No Android, é definida na classe android.text.InputType. O valor InputType consiste em duas partes: a classe de entrada (bits 0–4) e os modificadores (bits 5–31). A classe de entrada define o tipo de dados básico — texto, número, telefone, data. Os modificadores refinam o comportamento dentro da classe selecionada — por exemplo, para a classe de texto, você pode ativar a autocorreção, letras maiúsculas ou entrada multilinha.
O mecanismo InputType funciona em três níveis: no nível do framework Android, ele determina qual InputConnection será criado (a conexão entre EditText e IME); no nível do IME (teclado), ele especifica quais caracteres exibir e como lidar com a entrada; no nível do aplicativo, ele filtra os caracteres através do InputFilter integrado no EditText. De acordo com Android Source Code (AOSP, 2026), a máscara de bits é tratada no método TextView.getInputType(), que retorna o valor atual, e setInputType(), que reconfigura os filtros internos e a conexão com o IME.
Uma característica importante do InputType é que ele não pode ser lido de outro processo por razões de segurança. Isso evita o roubo de dados através do acesso ao tipo de entrada (por exemplo, determinar se um campo é uma senha). Ao tentar ler o InputType de outro aplicativo, TYPE_CLASS_TEXT é retornado por padrão.
// Constantes básicas do InputType
InputType.TYPE_CLASS_TEXT // 0x0001 = 1
InputType.TYPE_CLASS_NUMBER // 0x0002 = 2
InputType.TYPE_CLASS_PHONE // 0x0003 = 3
InputType.TYPE_CLASS_DATETIME // 0x0004 = 4
// Máscara para extrair a classe
InputType.TYPE_MASK_CLASS // 0x0000000F
O Android define quatro classes básicas de InputType. Cada classe corresponde a uma categoria específica de dados e ativa o tipo de teclado correspondente. A classe é especificada nos bits 0–4 da máscara de bits e pode ser extraída através da máscara TYPE_MASK_CLASS (0x0F).
| Classe | Constante | Teclado | Uso |
|---|---|---|---|
| TEXT | TYPE_CLASS_TEXT (1) | Teclado QWERTY | Texto, comentários, descrição |
| NUMBER | TYPE_CLASS_NUMBER (2) | Numérico | Quantidade, preço, idade |
| PHONE | TYPE_CLASS_PHONE (3) | Telefone | Número de telefone |
| DATETIME | TYPE_CLASS_DATETIME (4) | Data/hora | Data, hora |
TYPE_CLASS_DATETIME raramente é usado diretamente — para entrada de data normalmente se usa DatePicker ou DatePickerDialog em vez de um campo de texto. No entanto, em alguns cenários (entrada manual rápida de data), esta classe pode ser útil. Ela não tem um teclado especializado e geralmente exibe um teclado numérico.
Cada classe de entrada pode ser combinada com variações — subtipos especificados nos bits 5–7. Por exemplo, TYPE_TEXT_VARIATION_PASSWORD (bit 5) adiciona entrada oculta à classe TEXT. Bits de variação: 0x000000E0 (máscara TYPE_MASK_VARIATION).
As flags modificadoras do InputType (bits 8–31) adicionam capacidades adicionais à classe base. Elas não alteram o tipo de teclado, mas modificam o comportamento de entrada. As flags são específicas para cada classe — as flags de TEXT não funcionam com NUMBER, e vice-versa. Abaixo estão os principais modificadores para cada classe.
De acordo com Android Developers Documentation (2026), as flags de diferentes classes não se sobrepõem — tentar usar uma flag de TEXT com NUMBER será ignorado. Para verificar uma flag definida, use AND bit a bit: (inputType and FLAG) != 0.
A combinação correta de classes e flags de InputType é a chave para criar formulários fáceis de usar. Vamos examinar cenários típicos e suas configurações de InputType correspondentes. Cada cenário otimiza a entrada para um tipo específico de dados, tornando o formulário intuitivo e acelerando o preenchimento.
| Cenário | InputType | Teclado |
|---|---|---|
| Nome | textCapWords | QWERTY, cada palavra com inicial maiúscula |
| textEmailAddress | QWERTY com @ e . | |
| Senha | textPassword | QWERTY, entrada oculta |
| Telefone | phone | Dígitos com +, #, * |
| Preço | numberDecimal | Dígitos com ponto decimal |
| Quantidade | number | Apenas dígitos |
| Comentário | textCapSentences|textMultiLine | QWERTY, multilinha |
| Pesquisa | text|textNoSuggestions | QWERTY sem sugestões |
// Combinação para campo de preço
editText.inputType = InputType.TYPE_CLASS_NUMBER or
InputType.TYPE_NUMBER_FLAG_DECIMAL
// Combinação para campo de comentário
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_MULTI_LINE
Definir InputType programaticamente via setInputType() sobrescreve o valor anterior. Se você precisar alterar apenas parte da máscara (por exemplo, adicionar uma flag), deve salvar o valor atual, modificá-lo e aplicá-lo novamente. Cada chamada a setInputType() reconfigura os filtros internos do EditText.
O método setRawInputType() difere do setInputType porque não aciona a reconfiguração de filtros e sugestões. É usado para alterar temporariamente o InputType sem recarregar completamente o estado do EditText. Após chamar setInputType(), é recomendado reiniciar o IME para atualizar o teclado.
// Alternar entre senha e texto visível
fun togglePasswordVisibility(editText: EditText) {
val currentType = editText.inputType
val isPassword = (currentType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
editText.inputType = if (isPassword) {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
} else {
InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_VARIATION_PASSWORD
}
// Manter posição do cursor
val cursorPos = editText.selectionStart
editText.setSelection(cursorPos)
}
// Obter classe de entrada
fun getInputClass(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_CLASS
}
// Obter variação de entrada
fun getInputVariation(inputType: Int): Int {
return inputType and InputType.TYPE_MASK_VARIATION
}
// Verificar se é campo de senha
fun isPasswordField(editText: EditText): Boolean {
return (editText.inputType and
InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0
}
Escolher o InputType correto não é apenas uma questão de UX, mas também de segurança e correção dos dados. As principais recomendações incluem: especificar sempre um InputType explícito para cada EditText; usar a classe de entrada mais específica possível; não combinar flags de classes diferentes; usar variações PASSWORD para campos de dados sensíveis; usar imeOptions="actionSearch" para campos de pesquisa.
InputType também afeta a operação dos serviços de acessibilidade (Accessibility). Os campos com o tipo textPassword recebem proteção adicional dos leitores de tela — eles não leem os caracteres inseridos em voz alta. Para campos textEmailAddress, o leitor de tela informa ao usuário que o campo é destinado a email e fornece sugestões apropriadas.
De acordo com Material Design Guidelines (2025), o InputType deve corresponder ao tipo de dados que o usuário está inserindo. Um InputType incorreto não só retarda a entrada, mas também pode causar erros: por exemplo, se você deixar textMultiLine para um campo de número de telefone, o teclado não mostrará o teclado numérico e o usuário terá que alternar os layouts manualmente toda vez.
Perguntas frequentes
InputType é um atributo do EditText que define o tipo de dados de entrada através de uma máscara de bits. Keyboard Type é um nome não oficial para o tipo visual de teclado ativado pelo InputType. O InputType também afeta a filtragem de caracteres, a autocorreção e o preenchimento automático, não apenas o layout do teclado.
Defina editText.inputType = InputType.TYPE_CLASS_TEXT ou use a constante InputType.TYPE_NULL (0x00000000) para uma redefinição completa. Com TYPE_NULL, o campo não mostrará o teclado ao receber foco. Para retornar à entrada de texto padrão, defina TYPE_CLASS_TEXT sem flags.
Você não pode criar uma nova classe InputType, pois ela faz parte do framework Android. No entanto, você pode combinar classes e flags existentes para alcançar o comportamento desejado. Implemente filtragem adicional de caracteres através de InputFilter, que é definido no EditText usando o método setFilters().
InputType é passado para o sistema de entrada através do InputConnection. O IME lê a classe e variação do InputType e seleciona o layout de teclado correspondente. Por exemplo, TYPE_CLASS_NUMBER com TYPE_NUMBER_FLAG_DECIMAL faz o teclado mostrar um teclado numérico com ponto decimal. A maioria dos teclados modernos segue estas recomendações.
Use a propriedade editText.inputType em Kotlin ou editText.getInputType() em Java. Para extrair a classe, aplique a máscara: inputType and InputType.TYPE_MASK_CLASS. Para verificar uma flag específica: inputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE — se o resultado != 0, a flag está definida.
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