У меня есть 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);}
, но не сработало.
Как я могу ограничить только десятичный разделитель,но разрешить это с цифрами?