Android的学习笔记——EditText字符串过滤器InputFilter

来源:互联网 发布:视知传媒 编辑:程序博客网 时间:2024/05/17 07:53

在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 });
0 0