Проверка ввода числа Kotlin
Есть поле EditText в inputType выбрал numberDecimal.
Теперь возник вопрос проверки данных которые введёт пользователь. На пустое поле нашёл как проверять.
Осталось сделать проверку на то что пользователь введёт любые символы кроме цифр и точки, так же нужно сделать проверку на то что точка и ноль не может быть первыми символом. И проверку на то что после точки может быть только два знака.
Помогите пожалуйста а то в котлине и в андроид студио буквально пару дней) Заранее всем спасибо ;)
Ответы (3 шт):
Тип numberDecimal потому так и называется, что принимает только цифры, знак минус и десятичный разделитель. Ничего дополнительно проверять не надо
Чтобы проверить что введенные данные не начинаются с 0 или точки можно добавить в активность/фрагмент слушатель ввода и там проверять:
editTextSample.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) {
}
})
к примеру в этом методе onTextChanged вы будете проверять то что вводит пользователь сразу как он это ввел:
override fun onTextChanged(s: CharSequence, start: Int,
before: Int, count: Int) {
val text = s.toString().trim().get(0) // first letter
}
и дальше уже проверяйте на ваши условия
Это не изящное решение, но оно будет работать.
У вас есть два варианта, проверять поле ввода, после нажатия какой-то кнопки или же сразу (как ниже). Но тогда вам нужна некая задержка, чтобы пользователь успел ввести то, что задумал. Для этого отлично подходит Handler с задержкой в одну секунду, так пользователь поймет ошибку. Если ответ покажется вам полезным, могу его расширить.
Если правила проверки не такие, как вам нужно, опишите это в комментарии
editTextSample.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) {
if (isValid(s.toString)) {
// done
} else {
editTextSample.error = "your error text"
}
}
})
fun isValid(text: String): Boolean {
val firstLetter = text.firstOrNull()
if (firstLetter == null || firstLetter == '0' || firstLetter == '.') {
return false
}
if (!text.contains('.')) {
return false
}
if (text.substringAfter('.').count() != 2) {
return false
}
text.toDoubleOrNull() ?: return false
return true
}