У меня есть EditText, который уже имеет inputType
, равный number
. Это гарантирует, что можно ввести только di git из 0-9
.
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/uiEditTextNumber"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:inputType="number"
android:text="0"
android:textAlignment="center" />
Однако проблема в том, что пользователь все равно может ввести 000
или даже 0123
, что не выглядит допустимым. Я также хочу таким образом, когда нет символа, он вернется к 0
(вместо пустого "")
Я ищу в Stackoverflow и обнаружил, что большинство вопросов вращаются вокруг ограничения ввода на использование android:inputType="number"
, но ничего не сказано о том, как избежать 00
или 0123
путем автоматического преобразования их в 0
и 123
.
Я сделал нижеприведенную функцию, но, кажется, хак, где я должен вручную изменить текст и переместить курсор.
uiEditTextNumber.doAfterTextChanged {
if (it.isNullOrBlank()) {
modifyText("0")
return@doAfterTextChanged
}
val originalText = it.toString()
try {
val numberText = originalText.toInt().toString()
if (originalText != numberText) {
modifyText(numberText)
}
} catch (e: Exception) {
modifyText("0")
}
}
// ... AND the function
private fun modifyText(numberText: String) {
uiEditTextNumber.setText(numberText)
uiEditTextNumber.setSelection(numberText.length)
}
Есть ли лучшее решение?
Примечание ответ в Можно ли запретить использование первого числа в EditText как "0" не помогает, так как он просто запрещает пользователю вводить 01
и 0123
, но автоматически не меняется 0
на 1
, если один тип 1
. Кроме того, он также не гарантирует, что в EditText ничего нет, он автоматически устанавливается на 0
.