在Android开发过程中,一直都习惯用xml的digits来过滤EditText的特殊字符,但当用代码去set DigitsKeyListener的时候就会发现,set完后出来的键盘会是数字键盘。
经过阅读Android的源码,发现DigitsKeyListener其实专门为了过滤数字而设计的,而过滤字符应该实现InputFilter接口。
而Android源码里面唯一实现了InputFilter并且不是专门为了过滤数字的类,只有LoginFilter和LoginFilter的子类。而LoginFilter的构造函数是不公开的,所以我们可以通过重写LoginFilter的子类的isAllowed方法,轻松地达到代码过滤EditText字符串的目的。
具体实现如下:
public class MyInputFilter extends UsernameFilterGMail {
public MyInputFilter() {
super();
}
@Override
public boolean isAllowed(char c) {
// Allow [a-zA-Z0-9@.]
if ('0' <= c && c <= '9')
return true;
if ('a' <= c && c <= 'z')
return true;
if ('A' <= c && c <= 'Z')
return true;
return false;
}
}
然后把过滤器set进EditText。
MyInputFilter filter= new MyInputFilter();
editText.setFilters(new InputFilter[] { filter });