如何组合numberdecimal EditText的输入fiters?

时间:2016-10-24 04:42:09

标签: android android-edittext

我的应用程序包含单个numberdecimal EditText。我为EditText做了2个输入过滤器。我想组合这些输入过滤器,因为其中一个不起作用: 我想让用户无法输入大于120.0的值。 示例:

  

用户可以输入1,2.3,23,45.7,89.6,119.9,120.0等。   用户不能输入3.34,45.76,89.652,120.00,121.00等。

但是这段代码允许用户在小数点前输入任意数字,如他所愿:(

我的输入过滤器代码:

    editText.setFilters(new InputFilter[] {new InputFilterMinMax(1,120)});
    editText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(1)});

    public class DecimalDigitsInputFilter implements InputFilter {

    private final int decimalDigits;

    /**
     * Constructor.
     *
     * @param decimalDigits maximum decimal digits
     */
    public DecimalDigitsInputFilter(int decimalDigits) {
        this.decimalDigits = decimalDigits;
    }

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


        int dotPos = -1;
        int len = dest.length();
        for (int i = 0; i < len; i++) {
            char c = dest.charAt(i);
            if (c == '.' || c == ',') {
                dotPos = i;
                break;
            }
        }
        if (dotPos >= 0) {

            // protects against many dots
            if (source.equals(".") || source.equals(","))
            {
                return "";
            }
            // if the text is entered before the dot
            if (dend <= dotPos) {
                return null;
            }
            if (len - dotPos > decimalDigits) {
                return "";
            }
        }

        return null;
    }

    }

    public class InputFilterMinMax implements InputFilter {

    private int min, max;

    public InputFilterMinMax(int min, int max) {
        this.min = min;
        this.max = max;
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            int input = Integer.parseInt(dest.toString() + source.toString());
            if (isInRange(min, max, input))
                return null;
        } catch (NumberFormatException nfe) { }
        return "";
    }

    private boolean isInRange(int a, int b, int c) {
        return b > a ? c >= a && c <= b : c >= b && c <= a;
    }
   }

请定义如何创建一个组合过滤器,可以根据需要使用edittext

0 个答案:

没有答案