[英]Android edittext - do not allow decimal separator alone
我有一个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);}
但没有用。
如何仅限制小数点分隔符,但允许带数字呢?
如果这:
if(field1.getText().toString().equals(".")){field1.setText(0);}
是您的确切代码,然后确定它失败了,因为0
不是字符串,它是一个整数,被视为资源ID。
因此,首先尝试:
if(field1.getText().toString().equals(".")){field1.setText("0");}
如果再次失败,则考虑可以通过try/catch
来解决NumberFormatException
,如下所示:
double value = 0.0;
try {
value = Double.parseDouble(field1.getText().toString());
} catch (NumberFormatException e) {
field1.setText("0");
e.printStackTrace();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.