Como inserir máscara em um EditText no Android

Postado em por Wolmir Cezer Garbin em Android | 354 Visualizações
Última atualização em:

Com certeza uma das dificuldades em trabalhar com formulários em Android é formatar os EditText com mascaras especificas.

Como inserir máscara em um EditText no Android

Este artigo vai mostrar uma maneira simples e eficiente de fazer isso em seu projeto.

Considere a classe abaixo, copie e adicione a classe MaskEditUtil em seu projeto.

package br.com.receitasdecodigo.utils;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

public abstract class MaskEditUtil {

   public static final String FORMAT_CPF = "###.###.###-##";
   public static final String FORMAT_FONE = "(###)####-#####";
   public static final String FORMAT_CEP = "#####-###";
   public static final String FORMAT_DATE = "##/##/####";
   public static final String FORMAT_HOUR = "##:##";

   /**
    * Método que deve ser chamado para realizar a formatação
    *
    * @param ediTxt
    * @param mask
    * @return
    */
   public static TextWatcher mask(final EditText ediTxt, final String mask) {
       return new TextWatcher() {
           boolean isUpdating;
           String old = "";

           @Override
           public void afterTextChanged(final Editable s) {}

           @Override
           public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {}

           @Override
           public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
               final String str = MaskEditUtil.unmask(s.toString());
               String mascara = "";
               if (isUpdating) {
                   old = str;
                   isUpdating = false;
                   return;
               }
               int i = 0;
               for (final char m : mask.toCharArray()) {
                   if (m != '#' && str.length() > old.length()) {
                       mascara += m;
                       continue;
                   }
                   try {
                       mascara += str.charAt(i);
                   } catch (final Exception e) {
                       break;
                   }
                   i++;
               }
               isUpdating = true;
               ediTxt.setText(mascara);
               ediTxt.setSelection(mascara.length());
           }
       };
   }

   public static String unmask(final String s) {
       return s.replaceAll("[.]", "").replaceAll("[-]", "").replaceAll("[/]", "").replaceAll("[(]", "").replaceAll("[ ]","").replaceAll("[)]", "");
   }
}

Após colocar a classe no pacote utils da sua aplicação, ajuste o pacote para que não fique com erro e use nos EditText da seguinte forma:

editTextCpf.addTextChangedListener(MaskEditUtil.mask(editTextCpf, MaskEditUtil.FORMAT_CPF));

Ou pode passar a formatação, como segue o exemplo:

editTextCpf.addTextChangedListener(MaskEditUtil.mask(editTextCpf, "###.###.###-##"));

Formatar os EditText pode auxiliar o usuário da sua aplicação a informar os dados corretamente e evitar erro de digitação além de agilizar o processo de inclusão de dados.

Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

Posts relacionados


Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar