Cambiar el color de la línea inferior de EditText con appcompat v7

Resuelto Laurent asked hace 54 años • 25 respuestas

Estoy usando appcompat v7 para lograr una apariencia consistente en Android 5 y versiones anteriores. Funciona bastante bien. Sin embargo, no puedo encontrar la manera de cambiar el color de la línea inferior y el color de acento de EditTexts. ¿Es posible?

Intenté definir una costumbre android:editTextStyle(ver más abajo) pero solo logré cambiar el color de fondo completo o el color del texto, pero no la línea inferior ni el color de acento. ¿Existe un valor de propiedad específico para usar? ¿Tengo que usar una imagen dibujable personalizada a través de la android:backgroundpropiedad? ¿No es posible especificar un color en hexa?

 <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:editTextStyle">@style/Widget.App.EditText</item>
 </style>

 <style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
     ???
 </style>

Según las fuentes de la API 21 de Android, los EditTexts con diseño de materiales parecen usar colorControlActivatedy colorControlNormal. Por lo tanto, intenté anular estas propiedades en la definición de estilo anterior pero no tuvo ningún efecto. Probablemente appcompat no lo use. Desafortunadamente, no puedo encontrar las fuentes de la última versión de appcompat con material design.

Laurent avatar Jan 01 '70 08:01 Laurent
Aceptado

Finalmente, he encontrado una solución. Simplemente consiste en anular el valor de y colorControlActivateden la definición del tema de su aplicación y no en el estilo de edición de texto. Luego, piensa en utilizar este tema para cualquier actividad que desees. A continuación se muestra un ejemplo:colorControlHighlightcolorControlNormal

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">@color/accent</item>
    <item name="colorControlHighlight">@color/accent</item>
</style>
Laurent avatar Oct 29 '2014 13:10 Laurent

Sentí que esto necesitaba una respuesta en caso de que alguien quisiera cambiar solo un texto de edición. Yo lo hago así:

editText.getBackground().mutate().setColorFilter(ContextCompat.getColor(context, R.color.your_color), PorterDuff.Mode.SRC_ATOP);
hordurh avatar Feb 10 '2015 13:02 hordurh