Android : 将十进制输入过滤器与 NumberFormat 一起使用时不显示第一位数字

Android : First digit is not displaying when using decimal input filter with NumberFormat

在我的 android 应用程序中,我使用 decimal 输入过滤器来阻止小数点前 seperator(.) 到 14 和点后到 4 的位数,还使用 ​​NumberFormat 使用美国语言环境来格式化 user.I 输入的金额,当我如下尝试此操作时注意到 2 个问题。

我花了一半 day.I 更改了下面的 DecimalInputDegitsFilter class 屁股,终于解决了这个问题。

        public class DecimalDigitsInputFilter implements InputFilter {

        Pattern mPattern;
        int digitsBeforeZero,digitsAfterZero;

        public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero) {
            this.digitsBeforeZero = digitsBeforeZero;
            this.digitsAfterZero = 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.toString().replace(",", ""));
            if (!matcher.matches()) {
                if (dest.toString().contains(".")) {
                    if (dest.toString().substring(dest.toString().indexOf(".")).length() > digitsAfterZero) {
                        return "";
                    }
                    return null;
                } else if (!Pattern.compile("[0-9]{0," + (digitsBeforeZero - 1) + "}").matcher(dest).matches()) {
                    if (!dest.toString().contains(".")) {
                        if (source.toString().equalsIgnoreCase(".")) {
                            return null;
                        }
                    }
                    return "";
                }
                return "";
            }
            return null;
        }
    }