How can restrict my EditText input to some special character like backslash(/),tild(~) etc by soft keyboard in android programmatically

前端 未结 10 1920
故里飘歌
故里飘歌 2020-12-08 04:02

I am developing an application for keyboard, but i am geting an issue. I want to restrict/block some special character from soft keyboard in EditText in android programmatic

10条回答
  •  天命终不由人
    2020-12-08 04:19

    Unfortunately the accepted solution doesn't work in all the cases. The proper solution would be to use the following InputFilter:

    private InputFilter filter = new InputFilter() {
        // An example pattern that restricts the input only to the lowercase letters
        private static final Pattern restrictedChars = Pattern.compile("[a-z]*")
    
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            final CharSequence replacementText = source.subSequence(start, end);
            final CharSequence replacedText = dest.subSequence(dstart, dend);
    
            if (source == null || restrictedChars.matcher(replacementText).matches()) {
                return null; // Accept the original replacement
            }
    
            return replacedText; // Keep the original text
        }
    };
    

    This solution differs from the accepted one in that it solves the following problems:

    • only a subsequence of the source is the replacement, not the full source
    • source doesn't necessarily include only the newly typed text, sometimes it is the full text typed so-far

提交回复
热议问题