EditText利用InputFilter过滤特殊字符或改变输入的内容

时间:2022-12-19 17:09:20

场景

在我们开发的过程中 ,有时会对输入框的输入内容会有限制,比如不能有空格,不能输入$$ 等特殊字符,这时我们可以利用editText.setFilters来过滤.也可以利用过滤器来替换我们输入的内容 ,比如输入的一些敏感字用**来替换,

InputFilter的使用

   InputFilter inputFilter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

Log.e(TAG, "source:-->"+source+"==start-->"+start+"==end-->"+end+"==dest-->"
+dest.toString()+"==dstart-->"+dstart+"==dend-->"+dend);
if (source.equals(" ")){
return "0";
}
return null;
}
};
editText.setFilters(new InputFilter[]{inputFilter});

参数
source:输入时输入的字符,比如我们连续输入12,source分别为1,2

返回值:就是我们输入框显示的字符.比如上面的代码,输入的source是空格的时候,我们返回的是0,这时我们输入空格输入框上面显示的是0,所以我们让返回值返回”“,这样就可以输入任何内容都可以不显示

具体的参数信息我们看下面图片的log信息
EditText利用InputFilter过滤特殊字符或改变输入的内容

InputFilter实现类(AllCaps,LengthFilter)

AllCaps这个类可以实现输入的小写字母换成大写,如果设置此filter,输入框不再支持小写字母的书写,输出的全部是大写的
LengthFilter这个类可以限制输入框输入的最大长度

EditText如何使用

直接editText.setFilter(new InputFilter[]{}),参数是filter数组,这样我们可以同时给输入框设置多个过滤器

        InputFilter.AllCaps allCaps = new InputFilter.AllCaps();
InputFilter.LengthFilter lengthFilter=new InputFilter.LengthFilter(15);

editText.setFilters(new InputFilter[]{inputFilter,allCaps,lengthFilter});