4
Hello, I would like to create a Cpf mask using edittext, but I did not succeed; I searched the net and found several examples in java, but I could not adapt to c#, someone could help me?
Thanks in advance.
4
Hello, I would like to create a Cpf mask using edittext, but I did not succeed; I searched the net and found several examples in java, but I could not adapt to c#, someone could help me?
Thanks in advance.
5
I gave an improved code to facilitate the reuse of the code, follows below:
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);
}
}
Call of Activity:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var txtCpf = _view.FindViewById<EditText>(Resource.Id.txtCpf);
txtCpf.AddTextChangedListener(new Mask(txtCpf, "###.###.###-##"));
}
4
Well, if anyone wants something simpler on PCL just add this function in the Textchanged from entry, textCell
void cpfMask(object sender, EventArgs e)
{
var ev = e as TextChangedEventArgs;
if (ev.NewTextValue != ev.OldTextValue)
{
var entry = (Entry)sender;
string text = Regex.Replace(ev.NewTextValue, @"[^0-9]", "");
text = text.PadRight(11);
// removendo todos os digitos excedentes
if (text.Length > 11)
{
text = text.Remove(11);
}
text = text.Insert(3, ".").Insert(7, ".").Insert(11, "-").TrimEnd(new char[] { ' ', '.', '-' });
if (entry.Text != text)
entry.Text = text;
}
}
1
Good people, after a few hours studying, I managed to do and decided to share with you, in case someone has interest.
In reality I simply adapted to c#
, the original java code is at this link.
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
et = FindViewById<EditText>(Resource.Id.edittext1);
var ed = FindViewById<EditText>(Resource.Id.edittext2);
insert("###.###.###-##", et);
et.AddTextChangedListener(this);
}
public static string unmask(string s)
{
return s.Replace(".", "").Replace("-", "")
.Replace("/", "").Replace("(", "")
.Replace(")", "");
}
public void insert(string mask, EditText ediTxt)
{
_mask = mask;
et = ediTxt;
}
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 (Exception e)
{
break;
}
i++;
}
isUpdating = true;
et.Text = mascara;
et.SetSelection(mascara.Length);
}
}
}
Browser other questions tagged c# xamarin.android
You are not signed in. Login or sign up in order to post.
Jose Roberto you would have this project shared on Github?
– user42838
https://github.com/Altevir/xamarinforms-mask-behaviors
– Thiago Loureiro