我正在尝试为我的edittext创建一个过滤器,以便在点之后有一个最大小数位数。我想用这个editText来打字。
我将inputType
设置为numberDecimal
,但我可以在小数点后写出无数的数字。
我在StackOverFlow上发现很多线程来过滤最大小数,但我也想添加一个最大数字。
所以,我只想在< 0 和 1000 ]之间使用过滤器,>小数点后 2位数,但 1000是最大值。 (不能写1000.99)。
由于
答案 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?