Cambiar el color de la línea inferior de EditText con appcompat v7
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:background
propiedad? ¿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 colorControlActivated
y 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.
Finalmente, he encontrado una solución. Simplemente consiste en anular el valor de y colorControlActivated
en 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:colorControlHighlight
colorControlNormal
<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>
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);