Однажды у меня была такая же проблема. Стандартные клавиатуры на устройствах Samsung ужасны ... Нет возможности отобразить цифровую клавиатуру запятой.
Лучшее решение, которое я нашел, было просто заменить точку запятой через TextWatcher
.
Но только если десятичный разделитель локали по умолчанию - запятая.
Разрешить обе точки (.) И запятую (,) в digits
и установить inputType на numberDecimal
в XML:
<EditText
android:id="@+id/editText_price"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:digits="1234567890,."
android:imeOptions="actionDone"
android:inputType="numberDecimal" />
А затем добавьте TextWatcher
к этому тексту редактирования:
val separator = DecimalFormatSymbols.getInstance().decimalSeparator
if (separator == ',') {
editText_price.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
override fun afterTextChanged(s: Editable?) {
if (s.toString().contains(".")) {
val replaced = s.toString().replace('.', separator)
editText_price.setText(replaced)
editText_price.setSelection(replaced.length)
}
}
})
}
Затем, чтобы получить фактический номер строки, используйте это:
try {
val price = DecimalFormat.getInstance().parse(editTextPrice.text.toString());
} catch (e: ParseException) {
e.printStackTrace()
editText_price.setError(getString(R.string.error))
}