Necesito un EditText
que se vea así onError:
llamar a onError se ve así en su lugar:
Nota: la aplicación se ejecuta en SDK 19 (4.4.2)
min SDK es 1
¿Existe un método similar a setError que hace esto automáticamente, o tengo que escribir el código para ello?
Gracias
No es necesario utilizar una biblioteca de terceros ya que Google presentó TextInputLayout
como parte de la design-support-library
.
Siguiendo un ejemplo básico:
Nota: Al configurar la app:errorEnabled="true"
como un atributo de TextInputLayout
, no cambiará su tamaño una vez que se muestre un error, por lo que básicamente bloquea el espacio.
Para mostrar el error debajo de EditText
, simplemente debe llamar a #setError
en TextInputLayout
(NO en el EditText
hijo):
TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout); til.setError("You need to enter a name");
Para ocultar el error y restablecer el tinte simplemente llame a til.setError(null)
.
Para utilizar TextInputLayout
, debe agregar lo siguiente a sus dependencias build.gradle
:
dependencies { compile 'com.android.support:design:25.1.0' }
Por defecto, la línea de EditText
será roja. Si necesita mostrar un color diferente, puede usar el siguiente código tan pronto como llame a setError
.
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);
Para borrarlo, simplemente llame a la siguiente línea:
editText.getBackground().clearColorFilter;
Su EditText
debe estar envuelto en un TextInputLayout
Para obtener un mensaje de error como el que quería, establezca el error en TextInputLayout
TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail); if (error){ tilEmail.setError("Invalid email id"); }
Debe agregar la dependencia de la biblioteca de soporte de diseño. Agregue esta línea en sus dependencias gradle
compile 'com.android.support:design:22.2.0'
Llame myTextInputLayout.setError()
lugar de myEditText.setError()
.
Estos contenedores y contenciones tienen una doble funcionalidad en la configuración de errores. La funcionalidad que necesitas es la de contenedor. Pero podrías necesitar una versión mínima de 23 para eso.
La respuesta de reVerse es excelente, pero no señaló cómo eliminar el tipo de error flotante de la información sobre herramientas.
Necesitará edittext.setError(null)
para eliminar eso.
Además, como alguien señaló, no necesita TextInputLayout.setErrorEnabled(true)
Diseño
Código
TextInputLayout til = (TextInputLayout) editText.getParent(); til.setError("Your input is not valid..."); editText.setError(null);
TextInputLayout til = (TextInputLayout)editText.getParent(); til.setErrorEnabled(true); til.setError("some error..");