theme textappearance style studio estilo crear change apptheme app android android-layout android-ui android-theme

style - textappearance android



Colores dependientes del tema de los widgets seleccionados (1)

Estoy bastante seguro de que esta pregunta ya ha sido respondida en alguna parte. Simplemente parece demasiado común. Pero no puedo encontrar la respuesta. Tampoco puedo encontrar la solución.

Aquí está el problema:

Quiero que uno de mis TableRow tenga un color de fondo diferente. Es simple, solo necesito agregar.

android:background="#123456"

En la Declaración XML de TableRow. Pero, también quiero que mi aplicación tenga dos temas. En el otro tema, TableRow debe tener un color de fondo diferente. Simplemente no puedo encontrar una manera de definir un valor de color dentro de un tema y usarlo. Me gustaría escribir algo como esto:

<style name="Theme.MyApp" parent="@style/Theme.Light"> <color "my_cool_color">#123456</color> </style> <style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> <color "my_cool_color">#654321</color> </style>

Y, en la declaración de TableRow:

android:background="@color/my_cool_color"

Entonces, cuando cambio el tema, también cambia el color de ese fondo de TableRow. Lo he intentado de muchas maneras durante muchas horas y no tuve éxito ... Una cosa que no lo intenté, fue crear mi propio widget basándose en TableRow y declarar un estilo separado para él. Creo que esto debería funcionar, pero es Una solución demasiado pesada para un problema tan simple.


Puedes hacerlo usando atributos. Primero defina su atributo en attrs.xml (este archivo se encuentra en la carpeta ''valores''):

<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="myCoolColor" format="color" /> </resources>

Luego, en su styles.xml , defina myCoolColor para cada tema:

<style name="Theme.MyApp" parent="@style/Theme.Light"> <item name="myCoolColor">#123456</item> </style> <style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> <item name="myCoolColor">#654321</item> </style>

Ahora, especifique myCoolColor como el fondo de su vista:

android:background="?myCoolColor"

Puede ir más allá y usar una referencia a un color para que pueda mantener sus colores definidos en un solo lugar. Cambie el atributo para incluir una referencia (tenga en cuenta que podemos usar un color O una referencia):

<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="myCoolColor" format="color|reference" /> </resources>

Cambie su styles.xml para hacer referencia a un color para cada tema:

<style name="Theme.MyApp" parent="@style/Theme.Light"> <item name="myCoolColor">@color/blue</item> </style> <style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> <item name="myCoolColor">@color/green</item> </style>

Finalmente define los colores en tu colors.xml :

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="blue">#0000FF</color> <color name="green">#00FF00</color> </resources>

¡Eso es!