一尘不染

限制Android EditText中的小数位数

java android

我正在尝试编写一个可帮助你管理财务的应用程序。我正在使用一个EditText字段,用户可以在其中指定金额。

我将设置inputTypenumberDecimal可以正常使用,除了允许人们输入数字(例如,123.122这对金钱而言并不完美)之外,它设置得很好。

有没有办法将小数点后的字符数限制为两个?


阅读 330

收藏
2020-03-15

共1个答案

一尘不染

这是一个示例InputFilter,它仅允许在小数点前最多4位,在小数点后最多1位。

价值观是允许的EditText:555.2,555,0.2

价值观是的EditText块:55555.2,055.2,555.42

        InputFilter filter = new InputFilter() {
        final int maxDigitsBeforeDecimalPoint=4;
        final int maxDigitsAfterDecimalPoint=1;

        @Override
        public CharSequence filter(CharSequence source, int start, int end,
                Spanned dest, int dstart, int dend) {
                StringBuilder builder = new StringBuilder(dest);
                builder.replace(dstart, dend, source
                        .subSequence(start, end).toString());
                if (!builder.toString().matches(
                        "(([1-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?"

                        )) {
                    if(source.length()==0)
                        return dest.subSequence(dstart, dend);
                    return "";
                }

            return null;

        }
    };

    mEdittext.setFilters(new InputFilter[] { filter });
2020-03-15