0
public class MoneyTextWatcher implements TextWatcher {
private final WeakReference<EditText> editTextWeakReference;
private final Locale locale;
public MoneyTextWatcher(EditText editText, Locale locale) {
this.editTextWeakReference = new WeakReference<EditText>(editText);
this.locale = locale != null ? locale : Locale.getDefault();
}
public MoneyTextWatcher(EditText editText) {
this.editTextWeakReference = new WeakReference<EditText>(editText);
this.locale = Locale.getDefault();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
EditText editText = editTextWeakReference.get();
if (editText == null) return;
editText.removeTextChangedListener(this);
BigDecimal parsed = parseToBigDecimal(editable.toString(), locale);
String formatted = NumberFormat.getCurrencyInstance(locale).format(parsed);
editText.setText(formatted);
editText.setSelection(formatted.length());
editText.addTextChangedListener(this);
}
private BigDecimal parseToBigDecimal(String value, Locale locale) {
String replaceable = String.format("[%s,.\\s]", NumberFormat.getCurrencyInstance(locale).getCurrency().getSymbol());
String cleanString = value.replaceAll(replaceable, "");
return new BigDecimal(cleanString).setScale(
2, BigDecimal.ROUND_FLOOR).divide(new BigDecimal(100), BigDecimal.ROUND_FLOOR
);
}
}
//Codigo do editText
Locale mLocale = new Locale("pt", "BR");
mEditTextValorParc.addTextChangedListener(new MoneyTextWatcher(mEditTextValorParc, mLocale));
What is "treat"? Why are you using a Textwatcher for money if you don’t want the cash symbol?
– Pablo Almeida
In fact I only need a mask for monetary value in an editText, real in case you format this way to save in the database "20.99" if you have any example of how to do
– fabricio b.