¿El color del error TextInputLayout no se borra?
Tengo un TextInputLayout con un EditText dentro de él.
Este es mi xml:
- OnEditorActionListener no funciona
- Tipo de texto de correo electrónico android
- Obtener el valor de un campo de edición de texto
- Android ScaleAnimation no escala el área seleccionable
- Android EditText.setError () produce texto de error invisible
<android.support.design.widget.TextInputLayout android:id="@+id/textInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Enter Text" /> </android.support.design.widget.TextInputLayout>
Mi código java:
((TextInputLayout) findViewById(R.id.textInputLayout)).setError("ERROR");
Cuando llamo a setError ("ERROR") , el color de la etiqueta (pista) y el color de la línea inferior de EditText cambia a rojo y aparece el error. Este es el comportamiento que espero.
Ahora digamos que no llamo setError (null) antes de destruir mi actividad. Ahora abro la misma actividad otra vez. Puedo ver que la línea inferior sigue siendo roja para todos los campos de EditText dentro de mi uso, aunque el color de la etiqueta parece ser reajustado y el mensaje de error se rechaza. Esto no siempre es reproducible, pero si sigo intentándolo, finalmente puedo conseguirlo.
Estoy usando un Nexus 4 con 5.1.1.
¿Estoy haciendo algo mal?
- Generar Editar Texto Programaticamente en android
- ¿Hay una manera de detectar la palabra pulsada en un EditText
- Añadir EditText junto a RadioButton
- EditText no guardado automáticamente en el cambio de orientación de la pantalla
- EditText mostrando números con 2 decimales en todo momento
- ListView se desplaza hacia arriba cuando EditText crece
- .length () vs .getText (). Length () vs .getText (). ToString (). Length ()
- Cómo obtener texto de EditText?
Esto se debe a un error en la biblioteca AppCompat .
- Issue 190829: TextInputLayout setError hace que todos los TIL de la aplicación tengan subrayado rojo
Reportado por elyess.a … @ gmail.com, 19 de octubre de 2015 Uso de la biblioteca de soporte de diseño 23.1.0
Pasos para reproducir el problema (incluido el código de ejemplo, si procede).
- SetError en un TIL (es decir, en un formulario)
- El TIL tiene un subrayado rojo (ok)
- Navegue hacia atrás e ingrese de nuevo la actividad. O vaya a otra actividad con TIL.
Que pasó.
- Todos los TILs tienen un subrayado rojo, incluso en otras actividades. (Pero sin texto de error).
- Los subrayados rojos desaparecen sólo después de cerrar la aplicación.
También se informa aquí:
- Edición 190355: TextInputLayout setError () no mostrará un error después de que se borra
El estado del problema se cambió a FutureRelease
el 11 de noviembre de 2015, por lo que podemos esperar una solución próximamente.
Mientras tanto, parece que hay 3 soluciones:
- Compilar con v23.0.1 de la biblioteca
- Pero que introduce un problema similar en el que la línea de error no se restablece
- Agregar un invisible
EditText
a la parte superior de su diseño - Ejecute el siguiente código en su primer
EditText
-
editText.setBackground(editText.getBackground().getConstantState().newDrawable())
-
Este problema se resuelve en la versión 23.1.1 de la librería com.android.support: …
Tenía el mismo problema lo que funcionaba para mí estaba cambiando mi tema para extender desde Theme.Design.*
. Fuente: Edición 202051: UnsupportedOperationException en el contador de TextInputLayout
Como dijo @ Richard, es un error. Issue 190829: TextInputLayout setError hace que todos los TIL de la aplicación tengan subrayado rojo
He utilizado la solución de fijar el estado constante de nuevo al fondo. Sólo puede extender el TextInputLayout con su propia clase personalizada donde se anula el método setError ():
public class CustomTextInputLayout extends TextInputLayout { // Constructors... @Override public void setError(@Nullable CharSequence error) { super.setError(error); if ((getEditText() != null && getEditText().getBackground() != null) && (Build.VERSION.SDK_INT == 22 || Build.VERSION.SDK_INT == 21)) { Drawable drawable = getEditText().getBackground().getConstantState().newDrawable(); getEditText().setBackgroundDrawable(drawable); } } }
Y luego estoy reutilizando esta clase para envolver EditTexts. No experimenté efectos secundarios.