【发布时间】:2016-11-08 17:22:26
【问题描述】:
我是安卓编程新手。我创建了一个材料应用程序,用户可以使用该应用程序跟踪他们的体重。 (附注)我有用于输入值的编辑文本。我已经尝试过制作两个输入过滤器,但它们无法正常工作:
它们的代码:
editText.setFilters(new InputFilter[] {new InputFilterMinMax(1,140)});
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;
}
}
使用该代码,用户可以在小数点前输入任意数量的数字,但小数点后只能输入一个符号。例如:他可以输入145.6、2452.5、54356.5、34523423.5。
我想让用户只输入小数点前 1-140 的数字,但小数点后只输入一个符号:86.5、45.7、99.9、112.4、140.0。
请帮我更改我的代码以完成这项工作
【问题讨论】:
标签: android input android-edittext