我正在制作一个可以控制体重(公斤)的应用程序。 我有一个edittext可以接受使用以下命令输入十进制数字:
et_beratbadan.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);
我的edittext已经可以使用以下命令限制输入数字:零位前3位和零位后1位(120.1):
et_beratbadan.setFilters(new InputFilter[]{new DecimalDigitsInputFilter(3, 1)});
我想要的是,我的edittext能够限制输入数字,零之前为3位,零之后为1位,不接受负值并从1开始。
因此它将允许:123.4、12.3、1.2 不允许:0,-12.3、0.1
我已经尝试使用https://stackoverflow.com/a/38793820中的代码来使我的edittext不接受负值。还有其他一些代码,我为此失去了链接。
我有一个用于实现inputfilter的类:
public class DecimalDigitsInputFilter implements InputFilter {
private int mDigitsBeforeZero;
private int mDigitsAfterZero;
private Pattern mPattern;
private static final int DIGITS_BEFORE_ZERO_DEFAULT = 100;
private static final int DIGITS_AFTER_ZERO_DEFAULT = 100;
public DecimalDigitsInputFilter(Integer digitsBeforeZero, Integer digitsAfterZero) {
this.mDigitsBeforeZero = (digitsBeforeZero != null ? digitsBeforeZero : DIGITS_BEFORE_ZERO_DEFAULT);
this.mDigitsAfterZero = (digitsAfterZero != null ? digitsAfterZero : DIGITS_AFTER_ZERO_DEFAULT);
mPattern = Pattern.compile("-?[0-9]{0," + (mDigitsBeforeZero) + "}+((\\.[0-9]{0," + (mDigitsAfterZero)
+ "})?)||(\\.)?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String replacement = source.subSequence(start, end).toString();
String newVal = dest.subSequence(0, dstart).toString() + replacement
+ dest.subSequence(dend, dest.length()).toString();
Matcher matcher = mPattern.matcher(newVal);
if (matcher.matches())
return null;
if (TextUtils.isEmpty(source))
return dest.subSequence(dstart, dend);
else
return "";
}
}
对不起,我仍在学习英语和Java。谢谢!