Как установить предел значения в тексте редактирования от 0 до 300 - PullRequest
0 голосов
/ 18 марта 2020

Я хочу установить предел значения в тексте редактирования, а не символьный предел в тексте редактирования. например, когда я ввожу 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))
}

1 Ответ

0 голосов
/ 18 марта 2020

Попробуйте android: maxLength = "3"

Ссылка: http://androidblogger.blogspot.com/2009/01/numeric-edittext-and-edittext-with-max.html

...