Cómo configurar TextInputLayout color de mensaje de error?
¿Cómo puedo cambiar el color del mensaje de error que se puede configurar para aparecer debajo del campo de texto en un TextInputLayout
(a través de setError(...)
– ver estado de error aquí )?
Normalmente se muestra como un color rojo, que quiero cambiar. ¿Qué nombres de elementos / claves debo utilizar en mi archivo styles.xml
para orientar el color?
- ¿Cómo se cambia el color de línea / campo de EditText en TextInputLayout (cuando se llama a setError)?
- La vista de error de TextInputLayout no se quita al eliminar el mensaje de error
- Reaccione Nativo. ¿Cómo puedo mantener el foco en una entrada de texto cuando la página vuelve a aparecer en la marca del temporizador
- El texto de error en TextInputLayout está cubierto por el teclado
- TextInputLayout etiqueta a achor encima de la izquierda dibujable de un EditText
Gracias por adelantado.
Editar:
Añadido app:errorTextAppearance
clave a mi TextInputLayout
:
<android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:id="@+id/welcome_current_week_container" app:errorTextAppearance="@style/WelcomeErrorAppearance"> <EditText ..../> </android.support.design.widget.TextInputLayout> </LinearLayout>
Y el aspecto del error (se pone verde para la prueba) :
<style name="WelcomeErrorAppearance" parent="@android:style/TextAppearance"> <item name="android:textColor">@android:color/holo_green_dark</item> </style>
El resultado es que la sugerencia y el mensaje de error están coloreados (capturas de pantalla del emulador Android escalado) :
Regular (sin error):
Estado de error:
Editar 2 / Resultado:
Cuando aparece el mensaje de error, la sugerencia sobre el campo cambia al mismo color que el mensaje de error, sobrepasando el color de la pista.
- EditText añadido no es un TextInputEditText. Por favor, cambie a usar esa clase en su lugar
- ¿Puedo configurar los estilos personalizados globales de aplicaciones para los widgets de Android-support-design?
- Cómo cambiar la posición de etiqueta flotante de TextInputLayout en android
- Etiqueta flotante Spinner?
- Mantener TextInputLayout siempre enfocado o mantener la etiqueta siempre expandida
- Alinear la línea de base con un TextView que se envuelve dentro de un TextInputLayout
- Cómo lograr TextInputLayout animación al escribir el primer carácter en lugar de ganar el enfoque?
- Sugerencia no visible con TextInputLayout en estado de no foco
Cree un estilo personalizado que utilice @android:style/TextAppearance
como padre en su archivo styles.xml
:
<style name="error_appearance" parent="@android:style/TextAppearance"> <item name="android:textColor">@color/red_500</item> <item name="android:textSize">12sp</item> </style>
Y utilizarlo en su widget TextInputLayout:
<android.support.design.widget.TextInputLayout android:id="@+id/emailInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:errorTextAppearance="@style/error_appearance">
Editar: Establezca la sugerencia en el objeto, que está dentro de su TextInputLayout ( EditText
, TextView
, etc.) para mantener diferentes colores para la sugerencia y el error.
En realidad, para cambiar sólo el color del mensaje de error, puede establecer textColorError
en su tema (y también establecer colorControlNormal
y colorControlActivated
para el widget general y el color del texto de sugerencia). TextInputLayout
recoge ese atributo. NOTA: si establece errorTextAppearance
en un estilo personalizado, entonces textColorError
no tendrá ningún efecto.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorControlNormal">@color/control_normal</item> <item name="colorControlActivated">@color/control_activated</item> <item name="textColorError">@color/error</item> <!-- other styles... --> </style>
Y en tu AndroidManifest.xml:
<application android:theme="@style/AppTheme" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <!-- ... --> </application>
Necesitaba hacer esto dinámicamente. Uso de la reflexión:
public static void setErrorTextColor(TextInputLayout textInputLayout, int color) { try { Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView"); fErrorView.setAccessible(true); TextView mErrorView = (TextView) fErrorView.get(textInputLayout); Field fCurTextColor = TextView.class.getDeclaredField("mCurTextColor"); fCurTextColor.setAccessible(true); fCurTextColor.set(mErrorView, color); } catch (Exception e) { e.printStackTrace(); } }
Necesitará llamar a textInputLayout.setErrorEnabled(true)
antes de invocar el método anterior para que esto funcione.
Una versión modded de @ jared's Answer que funciona en mi caso:
public static void setErrorTextColor(TextInputLayout textInputLayout, int color) { try { Field fErrorView = TextInputLayout.class.getDeclaredField("mErrorView"); fErrorView.setAccessible(true); TextView mErrorView = (TextView)fErrorView.get(textInputLayout); mErrorView.setTextColor(color); mErrorView.requestLayout(); } catch (Exception e) { e.printStackTrace(); } }
Busqué en la fuente TextInputLayout y me di cuenta de que el color del texto de error se obtiene de colors.xml. Sólo tienes que añadir esto a tus colors.xml:
<color name="design_textinput_error_color_light" tools:override="true">your hex color</color>
- AOSP Privileged vs System app
- ¿Cómo puedo actualizar información de una actividad de Android desde un servicio de fondo