public class InputMask
extends java.lang.Object
implements android.text.TextWatcher, android.text.SpanWatcher
EditText maski.
Użycie:
EditText editText = (EditText) findViewById(R.id.text1);
InputMask mask = InputMask.applyTo(editText, "(00)-(000)");
Jako drugi parametr metody applyTo(EditText, String) należy podać maskę.
Znaki specjalne, które mogą zostać użyte w masce:
A - litera
a - litera (opcjonalna)
0 - cyfra
9 - cyfra (opcjonalna)
* - dowolny znak
? - dowolny znak (opcjonalny)
() - grupa zawierająca znaczący tekst który może zostać pobrany poprzez wywołanie metody #getText(true)
\L - otwarcie grupy małych liter
\U - otwarcie grupy dużych liter
\E - zamknięcie grupy
Przykłady:
- numer telefonu w formacie "777-77-77", maska: "000-00-00" - skrót państwa dużymi literami "PL", maska: "\\UAA\\E" - cena (2-3 cyfry całkowite) "50,00 zł", maska: "009,00 zł" Aby pobrać tylko wybrane znaki należy je zawrzeć w nawiasach "()" Przykład: dla maski: "(00)-(000)" i danych wejściowych "12-123" metoda:mask.getText(false)zwróci "12-123" metoda:mask.getText(true)zwróci "12123" Uwaga: jeśli chce się wykorzystać znak specjalny jako stały to należy go poprzedzić znakiem "\\" Przykłady: dla "17a" gdzie "a" jest stałą należy wprowadzić, maska "00\\a" dla "17\36", maska "00\\\\00" dla "(029)777-77-77", maska: "\\(000\\)000-00-00"
Uwaga: Niektóre klawiatury powodują złe działanie ograniczeń w przypadku włączonych sugestii, aby wyłączyć należy dodać:
editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
lub
android:inputType="textNoSuggestions"
Uwaga 2:
EditText musi mieć uprawnienie do dodawania wszystkich znaków z maski, w przeciwnym przypadku może zostać rzucony Exception
Przykład:
Jeśli maska zawiera inne znaki niż cyfry np. "00 zł" lub "00 000" oraz zostanie dodany android:inputType="number"
to biblioteka rzuci błędem IndexOutOfBoundsException ponieważ znaki ' ', 'z' oraz 'ł' nie są cyframi.
Aby rozwiązać ten problem należy zmienić inputType lub zdefiniować dozwolone znaki poprzez android:digits="1234567890łz "
| Modifier and Type | Method and Description |
|---|---|
void |
afterTextChanged(android.text.Editable s) |
static InputMask |
applyTo(android.widget.EditText editText,
java.lang.String mask) |
void |
beforeTextChanged(java.lang.CharSequence s,
int start,
int count,
int after) |
void |
changeMask(java.lang.String mask) |
java.lang.CharSequence |
getText(boolean onlyValuable) |
void |
onSpanAdded(android.text.Spannable text,
java.lang.Object what,
int start,
int end) |
void |
onSpanChanged(android.text.Spannable text,
java.lang.Object what,
int ostart,
int oend,
int nstart,
int nend) |
void |
onSpanRemoved(android.text.Spannable text,
java.lang.Object what,
int start,
int end) |
void |
onTextChanged(java.lang.CharSequence s,
int start,
int before,
int count) |
void |
removeMask()
Deprecated.
Because
TextView.removeTextChangedListener(TextWatcher) doesn't do this synchronized |
public static InputMask applyTo(android.widget.EditText editText, java.lang.String mask)
public void changeMask(java.lang.String mask)
@Deprecated public void removeMask()
TextView.removeTextChangedListener(TextWatcher) doesn't do this synchronizedpublic void beforeTextChanged(java.lang.CharSequence s,
int start,
int count,
int after)
beforeTextChanged in interface android.text.TextWatcherpublic void onTextChanged(java.lang.CharSequence s,
int start,
int before,
int count)
onTextChanged in interface android.text.TextWatcherpublic void afterTextChanged(android.text.Editable s)
afterTextChanged in interface android.text.TextWatcherpublic java.lang.CharSequence getText(boolean onlyValuable)
public void onSpanAdded(android.text.Spannable text,
java.lang.Object what,
int start,
int end)
onSpanAdded in interface android.text.SpanWatcherpublic void onSpanRemoved(android.text.Spannable text,
java.lang.Object what,
int start,
int end)
onSpanRemoved in interface android.text.SpanWatcherpublic void onSpanChanged(android.text.Spannable text,
java.lang.Object what,
int ostart,
int oend,
int nstart,
int nend)
onSpanChanged in interface android.text.SpanWatcher