У меня есть один Editext, который использует TextWatcher, чтобы создать маску валюты.
Работает нормально, но когда я пытаюсь удалить текст, нажимая и удерживая клавишу Backspace на программной клавиатуре, текст нестерты, если я не повторил, нажмите клавишу несколько раз.
Я думаю, что это может быть потому, что при каждом изменении текста мне приходится вызывать setText, и это мешает работе.
Любое предложение?
myEditText.addTextChangedListener(object : TextWatcher {
override fun onTextChanged(s: CharSequence, start: Int,
before: Int, count: Int) {
}
override fun beforeTextChanged(s: CharSequence, start: Int,
count: Int, after: Int) {
}
override fun afterTextChanged(editable: Editable) {
myEditText.removeTextChangedListener(this)
val parsed = parseToBigDecimal(editable.toString(), locale)
val formatted = NumberFormat.getCurrencyInstance(locale).format(parsed)
myEditText.setText(formatted)
myEditText.setSelection(formatted.length)
myEditText.addTextChangedListener(this)
}
})
private fun parseToBigDecimal(value: String, locale: Locale): BigDecimal {
val replaceable = String.format("[%s,.\\s]", NumberFormat.getCurrencyInstance(locale).currency.symbol)
val cleanString = value.replace(replaceable.toRegex(), "")
return BigDecimal(cleanString).setScale(
2, BigDecimal.ROUND_FLOOR).divide(BigDecimal(100), BigDecimal.ROUND_FLOOR
)
}