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);
}
}
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, "###.###.###-##"));
}
Compartilhei também no StackOverflow:
http://pt.stackoverflow.com/questions/105341/criar-uma-mask-para-cpf-usando-xamarin/142679#142679
Posts recentes
Categorias
- .Net (25)
- .Net Standard (2)
- .NetCore (3)
- Android (3)
- Arquitetura de Software (6)
- Asp.Net (6)
- C# (17)
- Dependency Injection (1)
- Entity Framework (3)
- Eventos (2)
- Fluent Interface (2)
- Gerenciamento de Projetos (1)
- IOS (3)
- NHibernate (4)
- ORM (5)
- Silverlight (3)
- Uncategorized (5)
- Visual Studio (10)
- WCF (5)
- Windows Azure (2)
- WPF (3)
- Xamarin (6)
1 Comentário. Deixe novo
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?