Когда я впервые вставляю номер телефона, событие onPaste запускается, как и ожидалось, и проверка/форматирование работает отлично.
Однако, если я удалю все символы и вставлю снова, поведение, похоже, переключится на событие onInput вместо onPaste, что нарушит желаемую функциональность.
Мне бы хотелось операция вставки, чтобы всегда вызывать событие onPaste независимо от состояние EditText.
Я пробовал следующие вещи.
[*]Реализовал TextWatcher для отслеживания изменений в EditText. .
[*]Переопределен onTextChanged для обработки форматирования при изменении ввода.
[*]Попытка использовать ClipboardManager для обнаружения событий вставки.
< /ol>
`класс PhoneNumberWatcher(
private val editText: EditText,
private val onInvalidPhoneNumber: (() -> Unit)? = null
) : TextWatcher {
Код: Выделить всё
private var isUpdating = false
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
if (isUpdating) return
val originalText = s.toString()
// Format the phone number and set the maximum length
val formattedNumber = AppUtils.formatMobileNo(originalText)
val maxLength = if (formattedNumber.length > 11) 15 else 11
editText.filters = arrayOf(InputFilter.LengthFilter(maxLength))
// Update the EditText if the formatted number is different
if (formattedNumber != originalText) {
isUpdating = true
editText.setText(formattedNumber)
editText.setSelection(formattedNumber.length)
isUpdating = false
}
// Trigger callback if the formatted number is too long
if (formattedNumber.length > 11) {
onInvalidPhoneNumber?.invoke()
}
}
Как я могу гарантировать, что вставка номера телефона в EditText всегда запускает событие onPaste, даже после очистки поля? Существуют ли какие-либо рекомендации по согласованному обнаружению событий вставки и форматированию номера телефона в этом случае?
Будем очень признательны за любую информацию или примеры кода.
Подробнее здесь: https://stackoverflow.com/questions/792 ... er-validat
Мобильная версия