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:

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> 

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!

  • ¿Por qué mi aplicación de Android no muestra el icono y el texto en ActionBar?
  • Java.lang.RuntimeException Theme.Sherlock
  • Transición cuando el cambio de tema (o Activity.recreate ())
  • Diseño de widget Android - fondo negro predeterminado
  • Error al importar HoloEverywhere
  • ¿Cómo establecer el tema en ProgressDialog?
  • App: el tema ya está obsoleto. Pase por usar android: tema en su lugar
  • Barra de herramientas de AppCompat popupTheme no se utiliza en ShareAction MenuItem
  • Utiliza el tema de Holo en la aplicación Android de Qt
  • PreferenciaLa actividad y el tema no se aplican
  • Atributos de altura de ActionBarSherlock en sdk bajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.