Como dijeron otros, agregué esta clase en mi proyecto y configuré el filtro como EditTextquiero.
El filtro se copia de la respuesta de @ Pixel. Solo lo estoy poniendo todo junto.
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 "";
}
}
Ahora configure el filtro en su EditTextcomo este.
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
Aquí, una cosa importante es que resuelve mi problema de no permitir mostrar más de dos dígitos después del punto decimal en eso, EditTextpero el problema es que cuando getText()de eso EditText, devuelve toda la entrada que escribí.
Por ejemplo, después de aplicar el filtro sobre EditText, intenté configurar la entrada 1.5699856987. Entonces en la pantalla muestra 1.56, que es perfecto.
Entonces quería usar esta entrada para algunos otros cálculos, así que quería obtener el texto de ese campo de entrada ( EditText). Cuando lo llamé mEditText.getText().toString()devuelve 1.5699856987 que no era aceptable en mi caso.
Así que tuve que analizar el valor nuevamente después de obtenerlo de EditText.
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScalehace el truco aquí después de obtener el texto completo de EditText.