Android:具有最大小数和最大数字的EditText

时间:2017-08-30 08:02:44

标签: java android android-edittext

我正在尝试为我的edittext创建一个过滤器,以便在点之后有一个最大小数位数。我想用这个editText来打字。

我将inputType设置为numberDecimal,但我可以在小数点后写出无数的数字。

我在StackOverFlow上发现很多线程来过滤最大小数,但我也想添加一个最大数字。

所以,我只想在< 0 1000 ]之间使用过滤器,小数点后 2位数,但 1000是最大值。 (不能写1000.99)。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用InputFilters实现这一目标

首先,您需要为十进制数字

创建输入过滤器
public class DecimalDigitsInputFilter implements InputFilter {

Pattern mPattern;

public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
    mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
}

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

    Matcher matcher=mPattern.matcher(dest);       
    if(!matcher.matches())
        return "";
    return null;
}

}

然后创建另一个输入过滤器以限制0到1000之间的数字

public class InputFilterMinMax implements InputFilter {

private int min, max;

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

public InputFilterMinMax(String min, String max) {
    this.min = Integer.parseInt(min);
    this.max = Integer.parseInt(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.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "1000"), new DecimalDigitsInputFilter(3,2)});

我还没有尝试过代码,但我认为这会让你走上正确的道路。

参考文献:

Limit Decimal Places in Android EditText

Is there a way to define a min and max value for EditText in Android?