Android EditText-不允许单独使用小数点分隔符

时间:2018-11-20 21:32:47

标签: android android-edittext decimal

我有一个Edittext,我只允许数字和十进制数字(分隔符后最多2个小数,例如125.50)。

我为此实现了一个过滤器:

 final EditText  field1 = (EditText)findViewById(R.id.field1);
 field1.setFilters(new InputFilter[] { filter });

    InputFilter filter = new InputFilter() {
        final int maxDigitsBeforeDecimalPoint=5;
        final int maxDigitsAfterDecimalPoint=2;

        @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(
                    "(([0-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?"

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

            return null;

        }
    };

这可以正常工作,但是问题是,如果用户插入小数分隔符ALONE,我将遇到java.lang.NumberFormatException:对于输入字符串:“。”

在我的 ontextChanged 中,我尝试了以下操作:

 if(field1.getText().toString().equals("[.]")){field1.setText(0);}

也是这个

if(field1.getText().toString().equals(".")){field1.setText(0);}

但没有用。

如何单独限制小数点分隔符,但允许带数字呢?

2 个答案:

答案 0 :(得分:1)

如果这样:

if(field1.getText().toString().equals(".")){field1.setText(0);}

是您的确切代码,然后确定它失败了,因为0不是字符串,它是一个整数,被认为是资源ID。
因此,首先尝试:

if(field1.getText().toString().equals(".")){field1.setText("0");}

如果再次失败,则认为NumberFormatException可以被try/catch解析,如下所示:

double value = 0.0;
try {
    value = Double.parseDouble(field1.getText().toString());
} catch (NumberFormatException e) {
    field1.setText("0");
    e.printStackTrace();
}

答案 1 :(得分:1)

对于引用,如果要使用InputFilter,可以使用此链接:https://stackoverflow.com/a/5368816/10396176

对于其他参考,如果要使用,请尝试使用textWatcher: https://stackoverflow.com/a/16684661/10396176