Я хочу установить предел значения в тексте редактирования, а не символьный предел в тексте редактирования. например, когда я ввожу 100, он вводится или задается максимальная длина 3. когда я вводлю 30, он устанавливает максимальную длину 2, когда я ввожу 4, затем устанавливаю максимальную длину 2, когда я ввожу 2, затем устанавливаю максимальную длину 3
. число, но в десятичном виде (.) не может быть введено в первый раз или не может быть введено дважды, и после десятичного числа оно содержит 2 значения. пример 100.00 введено 200.00 введено 30.745 не введено (установить максимальную длину 2 после десятичной дроби)
Изменить текстовый код
ed_weight.onChange {
try {
if (it.startsWith(".")) {
ed_weight.limitLength(1)
} else if (it.toFloat() >= 30.00) {
if (it.contains(".")) {
var len = it.indexOf('.')
ed_weight.limitLength(len + 3)
} else {
ed_weight.limitLength(2)
}
} else if (it.toFloat() < 299.00) {
if (it.contains(".")) {
var len = it.indexOf('.')
ed_weight.limitLength(len + 3)
} else {
ed_weight.limitLength(3)
}
} else {
ed_weight.limitLength(3)
}
} catch (e: Exception) {
}
}
Файл расширения
fun EditText.onChange(cb: (String) -> Unit) {
this.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
cb(s.toString())
}
})
}
fun EditText.limitLength(maxLength: Int) {
filters = arrayOf(InputFilter.LengthFilter(maxLength))
}