EditText é um componente básico do Android projetado para inserir e editar texto na interface do usuário. Ele herda de TextView e permite a entrada de caracteres através de teclados virtuais ou físicos. O EditText suporta vários modos: texto de linha única e multilinha, senhas, números, endereços de e-mail e números de telefone. De acordo com Android Developers (2026), o EditText é usado em mais de 90% dos aplicativos Android para criar formulários, campos de busca, chats e telas de entrada de dados.
Principais pontos
EditText é uma classe do pacote android.widget que implementa um campo de texto interativo para entrada de dados do usuário. Na hierarquia de herança do Android, EditText estende TextView, portanto herda todas as propriedades de um rótulo de texto, incluindo gerenciamento de fontes, cores e alinhamento. A principal diferença entre EditText e TextView é a capacidade de editar conteúdo — o usuário pode inserir, excluir e modificar texto diretamente na interface.
Cada EditText está associado a uma instância Editable que armazena o texto inserido e suporta operações de inserção, exclusão e substituição. Ao digitar, o EditText gerencia automaticamente a posição do cursor, a seleção de texto e um histórico de alterações para desfazer/refazer. De acordo com o Android Developers Guide (2026), o EditText também suporta autocompletar através da classe AutoCompleteTextView, que herda de EditText.
A arquitetura do EditText é baseada na separação do modelo (Editable), visão (TextView) e controlador (InputConnection). Ao obter foco, o EditText cria um InputConnection através do qual o sistema de entrada passa caracteres, pressionamentos de teclas e comandos de edição. Esse mecanismo garante compatibilidade com qualquer método de entrada — desde teclados virtuais até teclados Bluetooth físicos e entrada por voz.
val editText = EditText(context).apply {
hint = "Insira o texto"
inputType = InputType.TYPE_CLASS_TEXT
maxLines = 1
setTextColor(Color.parseColor("#000000"))
}
EditText fornece dezenas de atributos para ajustar finamente o comportamento e a aparência. Eles podem ser definidos tanto em layouts XML quanto programaticamente via Kotlin ou Java. Os atributos são divididos em categorias: controle de texto, restrições, estilo visual e interação com o teclado.
| Atributo | Descrição | Valor de exemplo |
|---|---|---|
| android:hint | Texto de dica exibido em um campo vazio | "Insira o e-mail" |
| android:inputType | Modo de entrada (texto, número, senha, etc.) | textEmailAddress |
| android:maxLines | Número máximo de linhas | 3 |
| android:maxLength | Comprimento máximo do texto em caracteres | 100 |
| android:textColorHint | Cor do texto de dica | #999999 |
O atributo android:hint é um dos mais importantes — ele informa ao usuário quais dados são esperados no campo. Quando o texto é inserido, a dica é ocultada automaticamente. A dica não participa do envio do formulário nem é salva como valor do campo. O Material Design recomenda usar TextInputLayout com rótulo flutuante em vez de uma dica simples para uma aparência mais moderna.
<!-- EditText in XML layout -->
@+id/etEmail
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:importantForAutofill="yes" />
O atributo inputType determina qual tipo de teclado será mostrado ao usuário e quais caracteres são permitidos para entrada. É uma máscara de bits onde a classe de entrada (TYPE_CLASS_TEXT, TYPE_CLASS_NUMBER, TYPE_CLASS_PHONE) é combinada com modificadores.
Cada modo de entrada não apenas altera o layout do teclado, mas também afeta o processamento do texto: no modo numérico apenas dígitos e separadores decimais são permitidos, no modo e-mail o símbolo @ e extensões de domínio estão disponíveis, e no modo telefone são exibidos dígitos e os símbolos +, #, *. Escolher o inputType correto afeta criticamente a experiência do usuário — um teclado inadequado obriga os usuários a trocar de modo, aumentando o tempo de preenchimento do formulário em 30–50%.
De acordo com as Material Design Guidelines (2025), recomenda-se usar o inputType mais específico para cada campo: textPassword para senhas, numberDecimal para preços, phone para números de telefone, textMultiLine para entrada multilinha. Isso acelera o preenchimento de formulários e reduz erros de entrada.
// Configuração programática de inputType
editText.inputType = InputType.TYPE_CLASS_TEXT or
InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or
InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
TextWatcher é uma interface para rastrear alterações de texto no EditText em tempo real. Contém três métodos: beforeTextChanged é chamado antes de uma alteração, onTextChanged é chamado durante a alteração, afterTextChanged é chamado após a conclusão da alteração do texto. O TextWatcher é usado para validação de entrada, contagem de caracteres, busca e autocompletar.
OnEditorActionListener lida com ações do usuário no teclado: pressionar Done (IME_ACTION_DONE), Search (IME_ACTION_SEARCH), Send (IME_ACTION_SEND), Next (IME_ACTION_NEXT) e outras. Este listener é especialmente útil para organizar a navegação do formulário — ao pressionar Next, o foco move-se automaticamente para o próximo campo, e ao pressionar Done, o teclado é ocultado e o envio é realizado.
De acordo com o Android Developers Blog (2025), o uso adequado do OnEditorActionListener com o atributo android:imeOptions permite criar formulários intuitivos sem botões de envio adicionais — o usuário preenche os campos e pressiona Done no teclado, o que aciona o salvamento ou a busca.
// TextWatcher para validação de e-mail
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
val isValid = Patterns.EMAIL_ADDRESS.matcher(s).matches()
editText.error = if (isValid) null else "Invalid email format"
}
})
// OnEditorActionListener para envio de formulário
editText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitForm()
true
} else false
}
Vamos ver um exemplo completo de criação de uma tela de login usando EditText para inserir e-mail e senha. Este exemplo demonstra a configuração de inputType, validação através de TextWatcher e manipulação do pressionamento do botão de login.
@+id/etLoginEmail
android:layout_width="match_parent"
android:hint="Email"
android:inputType="textEmailAddress"
android:maxLines="1" />
@+id/etLoginPassword
android:layout_width="match_parent"
android:hint="Password"
android:inputType="textPassword"
android:maxLines="1" />
class LoginFragment : Fragment() {
private lateinit var etEmail: EditText
private lateinit var etPassword: EditText
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
etEmail = view.findViewById(R.id.etLoginEmail)
etPassword = view.findViewById(R.id.etLoginPassword)
etEmail.addTextChangedListener(emailWatcher)
etPassword.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
performLogin()
true
} else false
}
}
}
EditText suporta personalização através de atributos XML, temas e estilos. É possível alterar a cor do texto, a cor da dica, a cor do sublinhado (backgroundTint), o estilo da fonte, o tamanho do texto e muito mais. O Material Components fornece o tema MaterialComponents.EditText com atributos personalizados incluindo boxStrokeColor, boxBackgroundColor e endIconMode.
Para alterar a cor do sublinhado do EditText, use o atributo android:backgroundTint, que define a cor para os estados normal e de foco. No Material Design, a cor do sublinhado é gerenciada através do colorPrimary do tema. Para personalização completa, você pode criar um drawable personalizado para o fundo na pasta res/drawable.
| Estilo | Atributo | Resultado |
|---|---|---|
| Cor do texto | android:textColor | Altera a cor do texto inserido |
| Cor da dica | android:textColorHint | Altera a cor do texto de dica |
| Sublinhado | android:backgroundTint | Altera a cor da linha sob o campo |
| Tamanho da fonte | android:textSize | Define o tamanho do texto em sp |
| Fonte | android:fontFamily | Aplica uma fonte personalizada |
Para criar um estilo consistente para todos os campos EditText no seu aplicativo, recomenda-se definir um estilo global no tema. O Material Design oferece o estilo Widget.MaterialComponents.TextInputLayout.OutlinedBox, que é aplicado automaticamente a todos os campos de entrada que usam TextInputLayout. Isso garante uma aparência consistente sem duplicar atributos em cada layout.
Perguntas frequentes
EditText herda de TextView e adiciona capacidades de edição de texto. O TextView apenas exibe texto, enquanto o EditText permite ao usuário inserir, excluir e modificar conteúdo. O EditText também suporta inputType, TextWatcher, gerenciamento de cursor e outras funções relacionadas à entrada de dados.
Use InputFilter — uma interface para filtrar caracteres de entrada. O EditText suporta a definição de um array de filtros através do método setFilters(). Por exemplo, InputFilter.LengthFilter limita o comprimento do texto, enquanto um InputFilter personalizado pode restringir caracteres específicos, expressões regulares ou intervalos Unicode.
Chame editText.text.toString() em Kotlin ou editText.getText().toString() em Java. A propriedade text retorna Editable, que é convertido para String através de toString(). Sempre verifique valores nulos ou vazios antes de usar o texto, especialmente em formulários com campos obrigatórios.
Defina o atributo android:inputType="textMultiLine" ou adicione programaticamente a flag InputType.TYPE_TEXT_FLAG_MULTI_LINE. No modo multilinha, o EditText permite quebras de linha via Enter e se expande automaticamente em altura. Use android:maxLines ou android:minLines para limitar a altura.
Defina o atributo android:enabled="false" ou chame editText.isEnabled = false no código. Um EditText desabilitado não responde ao toque, não pode obter foco e é exibido em cinza (estado desabilitado). Uma alternativa é usar android:focusable="false", que desabilita a entrada mas mantém a aparência normal.
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