Necesito hacer una validación de entrada de formulario en una serie de EditTexts. Estoy usando OnFocusChangeListeners para activar la validación después de que el usuario escriba en cada uno, pero esto no se comporta como se desea para el último EditText.
Si hago clic en el botón "Listo" mientras escribo en el EditText final, entonces InputMethod se desconecta, pero técnicamente nunca se pierde el foco en EditText (y, por lo tanto, la validación nunca ocurre).
¿Cuál es la mejor solución?
¿Debería estar monitoreando cuando InputMethod se desvincula de cada EditText en lugar de cuando cambia el foco? ¿Si es así, cómo?
android
android-edittext
Stefan
fuente
fuente
Respuestas:
¿Por qué no lo usas
TextWatcher
?Dado que tiene una serie de
EditText
cuadros para validar, creo que lo siguiente le conviene:android.text.TextWatcher
interfazafterTextChanged(Editable s)
método de la siguiente maneraLa
Editable s
realidad no ayuda para encontrar lo que se está cambiando el texto del cuadro de EditarTexto. Pero puede verificar directamente el contenido de los cuadros EditText comoEn el mismo método. Espero estar claro y si lo estoy, ¡ayuda! :)
EDITAR: Para un enfoque más limpio, consulte la respuesta de Christopher Perry a continuación.
fuente
TextWatcher es un poco detallado para mi gusto, así que hice algo un poco más fácil de tragar:
Solo úsalo así:
fuente
EditText
IS-ATextView
addTextChangedListener
después de resolver el texto de edición desde la vistaSi desea ventanas emergentes e imágenes de validación agradables cuando ocurre un error, puede usar el
setError
método de laEditText
clase como describo aquífuente
passwordConfirmTextField
, pero necesito hacer referencia al otropasswordTextField
, para poder compararlos. ¿Alguna sugerencia?Para reducir la verbosidad de la lógica de validación, he creado una biblioteca para Android . Se encarga de la mayoría de las validaciones diarias mediante anotaciones y reglas integradas. Hay limitaciones tales como
@TextRule
,@NumberRule
,@Required
,@Regex
,@Email
,@IpAddress
,@Password
, etc,Puede agregar estas anotaciones a sus referencias de widget de IU y realizar validaciones. También le permite realizar validaciones de forma asíncrona, lo que es ideal para situaciones como la verificación de un nombre de usuario único desde un servidor remoto.
Hay un ejemplo en la página de inicio del proyecto sobre cómo usar las anotaciones. También puede leer la publicación de blog asociada donde he escrito códigos de muestra sobre cómo escribir reglas personalizadas para validaciones.
Aquí hay un ejemplo simple que muestra el uso de la biblioteca.
La biblioteca es extensible, puede escribir sus propias reglas extendiendo la
Rule
clase.fuente
@Length
anotación.Esta fue una buena solución desde aquí
fuente
Enfoque actualizado - TextInputLayout:
Google ha lanzado recientemente la biblioteca de soporte de diseño y hay un componente llamado TextInputLayout y admite mostrar un error a través de
setErrorEnabled(boolean)
ysetError(CharSequence)
.¿Cómo usarlo?
Paso 1: Envuelva su EditText con TextInputLayout:
Paso 2: validar la entrada
He creado un ejemplo sobre mi repositorio de Github , ¡mira el ejemplo si lo deseas!
fuente
com.google.android.material.textfield.TextInputLayout
(observe el cambio de material ). Lo obtuve de esta respuesta: stackoverflow.com/a/56753953/900394Escribí una clase que extiende EditText que admite de forma nativa algunos métodos de validación y que en realidad es muy flexible.
Actualmente, mientras escribo, los métodos de validación de atributos xml son nativamente compatibles :
Puedes verlo aquí
Espero que lo disfrutes :)
fuente
Creo que InputFilter es más apropiado para validar entradas de texto en Android.
Aquí hay un ejemplo simple: ¿Cómo uso InputFilter para limitar los caracteres en un EditText en Android?
Puede agregar un Brindis para informar al usuario sobre sus restricciones. También verifique la etiqueta android: inputType.
fuente
Necesitaba hacer validación intracampo y no validación intercampo para probar que mis valores eran valores de coma flotante sin signo en un caso y valores de punto flotante con signo en otro. Esto es lo que parece funcionar para mí:
Tenga en cuenta que no debe tener espacios dentro de "numberSigned | numberDecimal". Por ejemplo: "numberSigned | numberDecimal" no funcionará. No estoy seguro de por qué.
fuente
Esto parece muy prometedor y justo lo que el doctor me ordenó:
EditText Validator
validadores personalizados más estos integrados en:
fuente
En el archivo main.xml
Puede poner el siguiente atributo para validar que solo los caracteres alfabéticos pueden aceptar en edittext.
Hacer esto :
fuente
Puede obtener el comportamiento deseado escuchando cuando el usuario presiona el botón "Listo" en el teclado, también consulte otros consejos sobre cómo trabajar con EditText en mi publicación "Validación de formulario de Android: la forma correcta"
Código de muestra:
fuente
para la validación de correo electrónico y contraseña intente
fuente
He creado esta biblioteca para Android donde puede validar un diseño de material EditText dentro y EditTextLayout fácilmente de esta manera:
entonces puedes usarlo así:
Luego puede verificar si es válido así:
Para obtener más ejemplos y personalización, consulte el repositorio https://github.com/TeleClinic/SmartEditText
fuente