Pesquisei sobre o código abaixo e achei pouca informação, então resolvei compartilhar, se você precisar de máscara de EditText no Xamarin Android, ou de algo parecido, dei uma melhorada em um outro código similar para melhorar o acoplamento, com ele podemos mascarar campos como CPF, CNPJ, Telefone, CEP entre outros.

 

[csharp]

public class Mask : Java.Lang.Object, ITextWatcher
{
private readonly EditText _editText;
private readonly string _mask;
bool isUpdating;
string old = "";

public Mask(EditText editText, string mask)
{
_editText = editText;
_mask = mask;
}

public static string Unmask(string s)
{
return s.Replace(".", "").Replace("-", "")
.Replace("/", "").Replace("(", "")
.Replace(")", "");
}

public void AfterTextChanged(IEditable s)
{
}

public void BeforeTextChanged(ICharSequence s, int start, int count, int after)
{
}

public void OnTextChanged(ICharSequence s, int start, int before, int count)
{
string str = Unmask(s.ToString());
string mascara = "";

if (isUpdating)
{
old = str;
isUpdating = false;
return;
}

int i = 0;

foreach (var m in _mask.ToCharArray())
{
if (m != ‘#’ && str.Length > old.Length)
{
mascara += m;
continue;
}
try
{
mascara += str[i];
}
catch (System.Exception ex)
{
break;
}
i++;
}

isUpdating = true;

_editText.Text = mascara;

_editText.SetSelection(mascara.Length);
}
}

[/csharp]

E na sua Activity você faz como segue abaixo:

 

[csharp]

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var txtCpf = _view.FindViewById<EditText>(Resource.Id.txtCpf);
txtCpf.AddTextChangedListener(new Mask(txtCpf, "###.###.###-##"));
}

[/csharp]

 

Compartilhei também no StackOverflow:

http://pt.stackoverflow.com/questions/105341/criar-uma-mask-para-cpf-usando-xamarin/142679#142679

1 Comentário. Deixe novo

  • Joao Paulo
    25/11/2016 11:02

    Olá, eu utilizei este método no meu código e quando o edittext começa vazio ele funciona perfeitamente. Porém, no meu formulário de edição, o campo de cpf já vem preenchido e quando eu seto o texto no edittext (etCpf.Text = usuario.cpf) ele quebra na hora de colocar a máscara. Como eu resolvo isso?

    Responder

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Preencha esse campo
Preencha esse campo
Digite um endereço de e-mail válido.
Você precisa concordar com os termos para prosseguir

Menu