Bem se você quiser mais informações sobre como implementar essas mascaras pegue nesse primeiro artigo que escrevi sobre como criar a mascara de Telefone neste post.
Aqui vou postar só o código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | package oraculum.droid.util; import android.content.Context; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; import android.text.method.NumberKeyListener; import android.util.AttributeSet; import android.widget.EditText; public class CepEditText extends EditText { private boolean isUpdating; /* * Maps the cursor position from phone number to masked number... 1234567890 * => 12345-678 */ private int positioning[] = { 0, 1, 2, 3, 4, 6, 7, 8, 9 }; public CepEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initialize(); } public CepEditText(Context context, AttributeSet attrs) { super(context, attrs); initialize(); } public CepEditText(Context context) { super(context); initialize(); } public String getCleanText() { String text = CepEditText.this.getText().toString(); text.replaceAll("[^0-9]*", ""); return text; } private void initialize() { final int maxNumberLength = 8; this.setKeyListener(keylistenerNumber); this.setText(" - "); this.setSelection(1); this.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { String current = s.toString(); /* * Ok, here is the trick... calling setText below will recurse * to this function, so we set a flag that we are actually * updating the text, so we don't need to reprocess it... */ if (isUpdating) { isUpdating = false; return; } /* Strip any non numeric digit from the String... */ String number = current.replaceAll("[^0-9]*", ""); if (number.length() > 8) number = number.substring(0, 8); int length = number.length(); /* Pad the number to 10 characters... */ String paddedNumber = padNumber(number, maxNumberLength); /* Split phone number into parts... */ String part1 = paddedNumber.substring(0, 5); String part2 = paddedNumber.substring(5, 8); /* build the masked phone number... */ String cep = part1 + "-" + part2; /* * Set the update flag, so the recurring call to * afterTextChanged won't do nothing... */ isUpdating = true; CepEditText.this.setText(cep); CepEditText.this.setSelection(positioning[length]); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } }); } protected String padNumber(String number, int maxLength) { String padded = new String(number); for (int i = 0; i < maxLength - number.length(); i++) padded += " "; return padded; } private final KeylistenerNumber keylistenerNumber = new KeylistenerNumber(); private class KeylistenerNumber extends NumberKeyListener { public int getInputType() { return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; } @Override protected char[] getAcceptedChars() { return new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; } } } |