I tested your method, but it fails when I use great numbers… I created this:
private String current = "";
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!s.toString().equals(current)){
[your_edittext].removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,.]", "");
double parsed = Double.parseDouble(cleanString);
String formatted = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formatted;
[your_edittext].setText(formatted);
[your_edittext].setSelection(formatted.length());
[your_edittext].addTextChangedListener(this);
}
}
Kotlin variant:
private var current: String = ""
override fun onTextChanged(
s: CharSequence,
start: Int,
before: Int,
count: Int
) {
if (s.toString() != current) {
discount_amount_edit_text.removeTextChangedListener(this)
val cleanString: String = s.replace("""[$,.]""".toRegex(), "")
val parsed = cleanString.toDouble()
val formatted = NumberFormat.getCurrencyInstance().format((parsed / 100))
current = formatted
discount_amount_edit_text.setText(formatted)
discount_amount_edit_text.setSelection(formatted.length)
discount_amount_edit_text.addTextChangedListener(this)
}
}