我的应用程序包含单个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