Skip to content Skip to sidebar Skip to footer

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?"