Android--字符串过滤器InputFilter--实现EditText限制输入数字的大小及小数点位数

概述
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文件设置

  • 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)});
}

  • 更多参考隔壁 https://www.jianshu.com/p/5b5cef2ffff2

你可能感兴趣的:(Android--字符串过滤器InputFilter--实现EditText限制输入数字的大小及小数点位数)