如何使用InputFilter Android Studio设置小数

时间:2019-07-02 19:48:57

标签: java android regex

我正在制作一个可以控制体重(公斤)的应用程序。 我有一个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。谢谢!

0 个答案:

没有答案