Temas de Android dificultan la implementación de la más simple: personalizado por color de tema
Soy un principiante en el desarrollo de Android y, aunque la codificación hace perfecto sence, temas de Android IMHO no
Tengo problemas para implementar esta sencilla tarea:
- TextColor vs TextColorPrimary vs TextColorSecondary
- Cómo establecer false cancelable a una actividad cuando se abre como un cuadro de diálogo?
- Creación de estilo predeterminado con atributos personalizados
- Barra de acción de Android barra divisora de barras
- Lollipop estilo EditBox
Tengo (por ejemplo) un color llamado "blah"
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="blah">#F0F0F0</color> <resources>
Que se utiliza en todas partes en diseños XML o código y por complonentes de vista diferentes como "@ color / blah"
Simplemente quisiera hacer este cambio de color por tema
Así que cuando uso MyTheme1, blah debería ser # F0F0F0 y cuando uso MyTheme2 blah debería ser # 00FF00
He estado leyendo sobre temas y todavía no puedo encontrar cómo implementar esta tarea sencilla, ya que mi aplicación no requiere estilos especiales y así sucesivamente, sólo por colores de tema.
Gracias de antemano
ACTUALIZAR:
Después del enlace proporcionado por Mohamed_AbdAllah, logré crear algunos colores personalizados definiéndolos en attrs.xml y styles.xml:
Attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="color_item_title" format="color|reference" /> </resources>
Styles.xml
<style name="AppBaseThemeDark" parent="android:Theme.Black"> <item name="color_item_title">@color/White</item> </style>
Pero ahora surge un problema mucho más grave
¿Puedo utilizar con éxito el color? Color_item_title en cada visión, así que los botones y el texto realmente consiguen ese color.
Pero el uso de que? Color_item_title en diseños personalizados o listview (que es puntos de vista que se inflan durante el tiempo de ejecución) provoca un bloqueo.
Así que usar? Color_item_title dentro de un listview listitem fallos de diseño en tiempo de ejecución con un mensaje inflable en esa línea 🙁
También se bloquea en mi drawables: (Error de inflación de nuevo)
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@color/Black" /> <corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp" android:topLeftRadius="8dp" android:topRightRadius="8dp" /> <stroke android:width="1dp" android:color="?color_item_title" /> </shape>
- Color del selector de lista de Android 4.4 Kit Kat
- Cómo cambiar el estilo de pestaña en Android?
- Cómo hacer referencia a un estilo en un tema personalizado
- Barra de estado de Android transparente cuando se utiliza AppTheme.NoActionBar
- Cómo utilizar el tema del proveedor en la aplicación de Android
- Utilizar atributos en el selector - Android
- No se establece el tema de Android
- Android Custom Theming en ActionBar / Tabs
Después de buscar y tratar, me dieron la punta que hay algunas cosas que puedes hacer y algunas cosas que no puedes .
Usted puede
A) Defina sus propios atributos en attrs
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="color_gallery_backround" format="color|reference" /> </resources>
B) Establecer sus valores en tus estilos.xml
<style name="AppBaseThemeDark" parent="android:Theme.Black"> <item name="color_gallery_backround">@color/White</item> </style> <style name="AppBaseThemeWhite" parent="android:Theme.Light"> <item name="color_gallery_backround">@color/Black</item> </style>
C) Utilizarlos en cualquier vista como? Color_gallery_backround o? Attr / color_gallery_backround por ejemplo
android:background="?attr/color_gallery_backround"
Puedes preguntar
A) No se puede acceder a este atributo de los drawables personalizados, ya que no son válidos durante la inflación
Así que no puedes usar? Attr / color_gallery_backround aquí:
Aduanashape.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="**?attr/color_gallery_backround**" /> <stroke android:width="2dp" android:color="@color/Black" /> </shape>
B) No puede acceder a este atributo en una vista que se inflará durante (por ejemplo) un ListView como una vista ListItem
Por lo tanto, el tema "soporte" para atributos por lo menos hasta API 10 tiene límites de profundidad.
Soluciones
Como se sugirió, usted tiene que crear dos dibujados separados utilizando diferentes colores y configurar atributos para hacer referencia a estos dibujables según el tema:
Attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="rounded_background" format="reference" /> </resources>
Y en cada tema, la disposición que actual drawable utilizar en styles.xml:
<resources> <style name="AppBaseThemeDark" parent="android:Theme.Black"> <item name="rounded_background">@drawable/round_rect_shape_dark</item> </style> <style name="AppBaseThemeLight" parent="android:Theme.Light"> <item name="rounded_background">@drawable/round_rect_shape_white</item> </style> </resources>
Ahora puedes hacer referencia a tu drawable como "rounded_background" y dejar que el tema lo elija.
Para las vistas hinchadas dentro de los diseños de ListView listitem, tiene que configurar los colores de forma programada.
La única manera de lograr lo que quieres es definir dos colores diferentes, blah
y blah2
por ejemplo, y hacer referencia a él en tus temas
Funciona para mí como sugería John S, pero en la definición de atributos tuve que añadir "color | reference" en lugar de solo "reference". Así que mi archivo attrs.xml se ve así:
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="rounded_background" format="color|reference" /> </resources>
Mejor regads!
- ¿Simular la conexión lenta a Internet en un dispositivo REAL?
- Universal Image Loader gridview parpadea después de la llamada notifyDataSetChanged