How To Filter The Input Of Edittext?
I want to filter the input of an EditText, only digits and letters are allowed, first I use TextWatcher to deal with the last input character, but when you move the cursor or you p
Solution 1:
Add InputFilter
to your EditText
& provide a Toast
for user . This code snippet will help you.
InputFilterfilter=newInputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (inti= start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) { // Accept only letter & digits ; otherwise just return
Toast.makeText(context,"Invalid Input",Toast.LENGTH_SHORT).show();
return"";
}
}
returnnull;
}
};
editText.setFilters(newInputFilter[] { filter });
Solution 2:
Have you tried the xml way? It will look something like this
<EditText
android:id="@+id/editText"
android:inputType="text"
android:digits="0,1,2,3,4,5,6,7,8,9,*,qwertzuiopasdfghjklyxcvbnm"
android:hint="Only letters and numbers allowed.."
/>
Solution 3:
Work on all Android Versions:
publicstatic InputFilter getOnlyCharactersFilter() {
return getCustomInputFilter(true, false, false);
}
publicstatic InputFilter getCharactersAndDigitsFilter() {
return getCustomInputFilter(true, true, false);
}
publicstatic InputFilter getCustomInputFilter(finalboolean allowCharacters, finalboolean allowDigits, finalboolean allowSpaceChar) {
returnnewInputFilter() {
@Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
booleankeepOriginal=true;
StringBuildersb=newStringBuilder(end - start);
for (inti= start; i < end; i++) {
charc= source.charAt(i);
if (isCharAllowed(c)) {
sb.append(c);
} else {
keepOriginal = false;
}
}
if (keepOriginal) {
returnnull;
} else {
if (source instanceof Spanned) {
SpannableStringsp=newSpannableString(sb);
TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
return sp;
} else {
return sb;
}
}
}
privatebooleanisCharAllowed(char c) {
if (Character.isLetter(c) && allowCharacters) {
returntrue;
}
if (Character.isDigit(c) && allowDigits) {
returntrue;
}
if (Character.isSpaceChar(c) && allowSpaceChar) {
returntrue;
}
returnfalse;
}
};
}
Now you can use this filer like:
//Accept Characters Only
edit_text.setFilters(new InputFilter[]{getOnlyCharactersFilter()});
//Accept Digits and Characters
edit_text.setFilters(new InputFilter[]{getCharactersAndDigitsFilter()});
//Accept Digits and Characters and SpaceBar
edit_text.setFilters(new InputFilter[]{getCustomInputFilter(true,true,true)});
Post a Comment for "How To Filter The Input Of Edittext?"