Estilos comunes para v10 y v11 +?
Estoy utilizando la biblioteca de soporte v7 para tener una ActionBar en el nivel API 10+ (que es Android 2.3.3+). Ahora, quiero personalizar el aspecto un poco, por lo que agregó un tema de aplicación. Extracto de mis values/styles.xml
:
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> <item name="background">@drawable/bg_actionbar</item> </style>
Esto funciona bien en Android 2.3.3, donde se utiliza el material compat. Sin embargo, en Android 4.3 en un N4 (o un emulador), los estilos no se aplican. Si cambio el archivo styles.xml
a:
- Selector de textColor de Android
- ¿Qué significan los valores para android: backgroundDimAmount?
- Las máquinas virtuales de Genymotion muestran Theme.Holo.DialogWhenLas actividades de grandes temas como las normales
- ¿Cómo hacer transparente AppCompat estilo?
- PlacePicker no recoge temas de material
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> <item name="android:background">@drawable/bg_actionbar</item> </style>
(Note el prefijo android:
añadido) funciona en 4.3, pero no en 2.3 (estilos no aplicados).
¿Hay alguna manera de evitar esto sin especificar cada <item>
dos veces, una vez con el prefijo y una vez sin?
- Uso de estilos privados (No se encontró ningún recurso que coincida con el nombre dado)
- Cambiar la imagen de fondo de la aplicación
- Cómo personalizar el estilo de botón Material de AppCompat?
- Android: Conjunto de cuentas Juego de luz
- Orden de render incorrecto para el botón cuando se aplica el tema material
- Tema no aplicado con la biblioteca appcompat en algunos dispositivos Android 4.X
- Actividad temática de diálogo: botones positivos y negativos
- ¿Cómo se procesan los estilos predeterminados de Android (en particular, ButtonBar y ButtonBar.Button)?
Hay un ejemplo perfecto en el sitio de Google Docs:
http://developer.android.com/guide/topics/ui/actionbar.html#StyleExample
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- the theme applied to the application or activity --> <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light"> <item name="android:actionBarStyle">@style/MyActionBar</item> <item name="android:actionBarTabTextStyle">@style/TabTextStyle</item> <item name="android:actionMenuTextColor">@color/actionbar_text</item> <!-- Support library compatibility --> <item name="actionBarStyle">@style/MyActionBar</item> <item name="actionBarTabTextStyle">@style/TabTextStyle</item> <item name="actionMenuTextColor">@color/actionbar_text</item> </style> <!-- general styles for the action bar --> <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar"> <item name="android:titleTextStyle">@style/TitleTextStyle</item> <item name="android:background">@drawable/actionbar_background</item> <item name="android:backgroundStacked">@drawable/actionbar_background</item> <item name="android:backgroundSplit">@drawable/actionbar_background</item> <!-- Support library compatibility --> <item name="titleTextStyle">@style/TitleTextStyle</item> <item name="background">@drawable/actionbar_background</item> <item name="backgroundStacked">@drawable/actionbar_background</item> <item name="backgroundSplit">@drawable/actionbar_background</item> </style> <!-- action bar title text --> <style name="TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/actionbar_text</item> </style> <!-- action bar tab text --> <style name="TabTextStyle" parent="@style/Widget.AppCompat.ActionBar.TabText"> <item name="android:textColor">@color/actionbar_text</item> </style> </resources>
¿Hay alguna manera de evitar esto sin especificar cada
<item>
dos veces, una vez con el prefijo y una vez sin?
Otra forma sería crear carpetas específicas de res/values-XX
.
Dado que la división es la versión 10 y las versiones 10+, puede crear res/values-v10/styles.xml
contiene:
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> <item name="background">@drawable/bg_actionbar</item> </style>
Deje que las versiones 10+ traten con los res/values/styles.xml
:
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> <item name="android:background">@drawable/bg_actionbar</item> </style>
Sin embargo, no es muy diferente de especificar <item></item>
dos veces.
Para referencia, puede ver la estructura del proyecto de ActionBarSherlock. Eso debería proporcionarle algunos consejos.
También puede echar un vistazo a: Aplicación de estilos y temas a la interfaz de usuario . Desplácese hasta la subsección Select a theme based on platform version
.
Si no he entendido mal su problema, puede colapsarlo juntos de esta manera
<style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:actionBarStyle">@style/ActionBarStyle</item> <item name="actionBarStyle">@style/ActionBarStyle</item> </style> <style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> <item name="android:background">@drawable/bg_actionbar</item> <item name="background">@drawable/bg_actionbar</item> </style>
En mi experiencia, de esta manera eclipse da errores de tiempo de compilación cada vez que cambia algo dentro de styles.xml
(debido a la pelusa si recuerdo bien), pero clean and rebuild
hacen que esos errores desaparezcan.