概述
InputFilter是系统提供的一个接口,里面只有一个方法filter(),用于过滤输入/插入的字符串,返回值为CharSequence。 一般都是通过判断语句来过滤字符串,在这里 InputFilter 是另外一种实现方式。
- 代码
/******************************* 输入框关联 *********************************/
et02.setFilters(filter);
/**********************************调用**************************************/
private InputFilter[] filter = new InputFilter[] {
new InputFilter() {
/**
* @param source 输入的文字
* @param start 输入-0,删除-0
* @param end 输入-文字的长度,删除-0
* @param dest 原先显示的内容
* @param dstart 输入-原光标位置,删除-光标删除结束位置
* @param dend 输入-原光标位置,删除-光标删除开始位置
* @return
*/
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
return null;
}
}
};
示例使用
- Xml文件设置
<EditText
.............
android:id="@+id/et_test"
android:inputType="numberDecimal"
.............
/>
- InputFilterMinMax.class文件
public class InputFilterMinMax implements InputFilter {
private float min, max;
private int dot_num;
public InputFilterMinMax(float min, float max,int dot_num) {
this.min = min;
this.max = max;
this.dot_num = dot_num;
}
public InputFilterMinMax(String min, String max) {
this.min = Float.valueOf(min);
this.max = Float.valueOf(max);
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
//限制小数点位数
if (source.equals(".") && dest.toString().length() == 0) {
return "0.";
}
if (dest.toString().contains(".")) {
int index = dest.toString().indexOf(".");
int mlength = dest.toString().substring(index).length();
if (mlength == dot_num+1) {
return "";
}
}
//限制大小
float input = Float.valueOf(dest.toString() + source.toString());
if (isInRange(min, max, input))
return null;
} catch (Exception nfe) { }
return "";
}
private boolean isInRange(float a, float b, float c) {
return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}
- Activit 调用
public class Activity extends AppCompatActivity implements View.OnClickListener {
private EditText test = findViewById(R.id.et_test)
//设置EditText输入框范围为0~999,小数位数为1位
test.setFilters(new InputFilter[]{new InputFilterMinMax(0,999,1)});
}