Мне нужно сделать проверку ввода формы на серии EditTexts. Я использую OnFocusChangeListeners для запуска проверки после того, как пользователь вводит в каждый из них, но это не ведет себя так, как требуется для последнего EditText.
Если я нажимаю кнопку «Готово» во время ввода окончательного EditText, тогда InputMethod отключается, но технически фокус никогда не теряется на EditText (и поэтому проверка никогда не происходит).
Какое лучшее решение?
Должен ли я отслеживать, когда InputMethod отсоединяется от каждого EditText, а не когда фокус меняется? Если да, то как?
android
android-edittext
Стефан
источник
источник
Ответы:
Почему ты не используешь
TextWatcher
?Поскольку у вас есть несколько
EditText
коробок для проверки, я думаю, что вам подойдет следующее:android.text.TextWatcher
интерфейсafterTextChanged(Editable s)
метод следующим образомЭто
Editable s
действительно не помогает найти, какой текст окна EditText изменяется. Но вы можете напрямую проверить содержимое полей EditText, какв том же методе. Я надеюсь, что я ясен, и если я, это помогает! :)
РЕДАКТИРОВАТЬ: для более чистого подхода обратитесь к ответу Кристофера Перри ниже.
источник
TextWatcher немного многословен на мой вкус, поэтому я сделал что-то более легкое для проглатывания:
Просто используйте это так:
источник
EditText
IS-ATextView
addTextChangedListener
после разрешения вашего текста редактирования из видаЕсли вам нужны хорошие всплывающие окна и изображения для проверки при возникновении ошибки, вы можете использовать
setError
методEditText
класса, который я здесь опишуисточник
passwordConfirmTextField
, но мне нужно сослаться на другойpasswordTextField
, чтобы я мог сравнить их. Какие-либо предложения?Чтобы уменьшить детализацию логики проверки, я создал библиотеку для Android . Он заботится о большинстве повседневных проверок с использованием аннотаций и встроенных правил. Есть ограничения , такие как
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
и т.д.,Вы можете добавить эти аннотации к ссылкам на виджеты вашего пользовательского интерфейса и выполнить проверки. Это также позволяет выполнять проверки асинхронно, что идеально подходит для таких ситуаций, как проверка уникального имени пользователя с удаленного сервера.
На домашней странице проекта приведен пример использования аннотаций. Вы также можете прочитать соответствующий пост в блоге, где я написал примеры кодов о том, как писать собственные правила для проверок.
Вот простой пример, который изображает использование библиотеки.
Библиотека расширяемая, вы можете написать свои собственные правила, расширяя
Rule
класс.источник
@Length
аннотацией.Это было хорошее решение отсюда
источник
Обновленный подход - TextInputLayout:
Google недавно запустил библиотеку поддержки дизайна, и есть один компонент с именем TextInputLayout, который поддерживает отображение ошибки с помощью
setErrorEnabled(boolean)
иsetError(CharSequence)
.Как это использовать?
Шаг 1: оберните ваш EditText с TextInputLayout:
Шаг 2: Проверьте ввод
Я создал пример над своим репозиторием Github , зацените его, если хотите!
источник
com.google.android.material.textfield.TextInputLayout
(обратите внимание на изменение материала ). Получил это от ответа: stackoverflow.com/a/56753953/900394Я написал класс, который расширяет EditText, который изначально поддерживает некоторые методы проверки и на самом деле очень гибок.
Текущие, как я пишу, изначально поддерживаются с помощью методов проверки атрибутов XML :
Вы можете проверить это здесь
Надеюсь, тебе понравится :)
источник
Я считаю InputFilter более подходящим для проверки ввода текста на Android.
Вот простой пример: как я могу использовать InputFilter для ограничения символов в EditText в Android?
Вы можете добавить тост, чтобы оставить отзыв о ваших ограничениях. Также проверьте тег android: inputType.
источник
Мне нужно было выполнить проверку внутри поля, а не проверку между полями, чтобы проверить, что мои значения были беззнаковыми значениями с плавающей запятой в одном случае и знаковыми значениями с плавающей запятой в другом. Вот что, кажется, работает для меня:
Обратите внимание, что у вас не должно быть пробелов внутри "numberSigned | numberDecimal". Например: «numberSigned | numberDecimal» не будет работать. Я не уверен почему.
источник
Это выглядит действительно многообещающе и именно то, что доктор заказал для меня:
EditText Validator
пользовательские валидаторы плюс эти встроенные
источник
В файле main.xml
Вы можете поместить следующий атрибут для проверки только буквенного алфавита, который может принимать текст редактирования.
Сделай это :
источник
Вы можете получить желаемое поведение, слушая, когда пользователь нажимает кнопку «Готово» на клавиатуре, а также ознакомьтесь с другими советами по работе с EditText в моем посте. «Проверка формы Android - правильный путь»
Образец кода:
источник
для проверки электронной почты и пароля попробуйте
источник
Я создал эту библиотеку для Android, где вы можете проверить дизайн материала EditText внутри и EditTextLayout легко, как это:
тогда вы можете использовать это так:
Затем вы можете проверить, действительно ли это так:
Дополнительные примеры и настройки можно найти в хранилище https://github.com/TeleClinic/SmartEditText.
источник