Как говорили другие, я добавил этот класс в свой проект и установил фильтр на « EditText
Я хочу».
Фильтр скопирован из ответа @ Pixel. Я просто собираю все вместе.
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter() {
mPattern = Pattern.compile("([1-9]{1}[0-9]{0,2}([0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String formatedSource = source.subSequence(start, end).toString();
String destPrefix = dest.subSequence(0, dstart).toString();
String destSuffix = dest.subSequence(dend, dest.length()).toString();
String result = destPrefix + formatedSource + destSuffix;
result = result.replace(",", ".");
Matcher matcher = mPattern.matcher(result);
if (matcher.matches()) {
return null;
}
return "";
}
}
Теперь установите фильтр в вашем EditText
вот так.
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
Здесь одна важная вещь заключается в том, что он решает мою проблему, заключающуюся в том, что я не позволяю отображать более двух цифр после десятичной точки в этом, EditText
но проблема в том, что когда я getText()
из этого EditText
, он возвращает весь введенный мной ввод.
Например, после применения фильтра к EditText
, я попытался установить input 1.5699856987. Итак, на экране отображается 1,56, что идеально.
Затем я хотел использовать этот ввод для некоторых других вычислений, поэтому я хотел получить текст из этого поля ввода (EditText
). Когда я позвонилmEditText.getText().toString()
он вернул 1,5699856987, что в моем случае было неприемлемо.
Поэтому мне пришлось снова проанализировать значение после получения его из EditText
.
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
делает фокус здесь после получения полного текста из EditText
.