2012-01-09 21 views
15

Me gustaría tener una ActionBar oscura pero que el resto de la aplicación use el tema Holo.Light. Sé que hay un Theme.Holo.Light.DarkActionBar Theme en ICS/4.0 pero también quiero que esto funcione en Honeycomb/3.0 +.¿Cómo usar el tema Holo.Light pero hacer que ActionBar use Holo withouth ICS?

En el momento estoy usando el tema Holo oscuro y para el resto de mis componentes estoy usando ContextThemeWrapper. Pero esto es mucho trabajo y puede conducir fácilmente a errores.

¿Esto es posible?

Respuesta

24

Cree un estilo personalizado y establezca el estilo principal para el tema holo light, pero la barra de acciones para Holo normal.

un archivo XML con algo como esto debe hacer el trabajo (fuera de mi memoria):

<style name="appstyle0" parent="android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@android:style/Widget.Holo.ActionBar</item> 
</style> 

asentando después la appstyle0 en su AndroidManifest.xml como el estilo y en todas sus muchas actividades son tema de la luz holo pero el estilo de la barra de acción es holo dark.

Editar: Comprobé por qué mi primera respuesta no funciona.

<style name="Widget.Holo.Light.ActionBar" parent="Widget.Holo.ActionBar"> 
    <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title</item> 
    <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item> 
    <item name="android:background">@android:drawable/ab_transparent_light_holo</item> 
    <item name="android:backgroundStacked">@android:drawable/ab_stacked_transparent_light_holo</item> 
    <item name="android:backgroundSplit">@android:drawable/ab_bottom_transparent_light_holo</item> 
    <item name="android:homeAsUpIndicator">@android:drawable/ic_ab_back_holo_light</item> 
    <item name="android:progressBarStyle">@android:style/Widget.Holo.Light.ProgressBar.Horizontal</item> 
    <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.Light.ProgressBar</item> 
</style> 

La barra de acciones se define en styles.xml con los atributos que se establecen por el tema principal en general. En primer lugar, el BG es transparente, por lo que debe utilizar "Widget.Holo.Light.ActionBar.Solid" como principal. Luego tiene que configurar los diferentes elementos uno por uno para el tema oscuro. permite echar titleTextStyle como ejemplo:

<style name="TextAppearance.Holo.Widget.ActionBar.Title.Own" 
     parent="TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:textColor">@android:color/primary_text_holo_dark</item> 
    <item name="android:textColorHighlight">@android:color/highlighted_text_holo_dark</item> 
    <item name="android:textColorHint">@android:color/hint_foreground_holo_dark</item> 
    <item name="android:textColorLink">@android:color/holo_blue_light</item> 
</style> 

Conjunto esto ahora como.

<item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Own</item> 

Proceda de esta manera con los atributos xml anteriores.

Para buscar todos los atributos relacionados, busque en styles.xml y themes.xml los parámetros. Lamento decirlo, pero supongo que no hay una manera fácil, según lo que veo ...

+0

No funciona para mí.Por ejemplo: ' ​​@ del color/background_color @ estilo/CustomActionBarStyle ' Esto me da el paddingLeft pero no aplica el tema Holo oscuro a la barra de acciones, sigue siendo el tema claro. – Thomas

+0

Lamentablemente, no es tan fácil. Actualicé la respuesta. – KarlKarlsom

+0

Thx - Voy a intentar esto. – Thomas

5

Me encontré con un problema similar cuando quería poner una vista personalizada en la barra de acciones. Quería una barra de acción oscura mientras el resto de la aplicación permanecía liviano. Más específicamente, tuve spinners en la barra de acción.

En primer lugar el tema debe extenderse

<style name="MyTheme.Light" parent="android:Theme.Holo.Light.DarkActionBar"> 

A continuación, a partir de su actividad, utilizar getActionBar().getThemedContext() como el contexto para inflar sus puntos de vista. En mi caso, es lo que pasé a mis adaptadores de array spinner.

Funcionó perfectamente para mí.

0

pareció que es fácil ... 100% trabaja

añada la línea siguiente para AssemblyInfo.cs

[assembly: Application(Theme = "@android:style/Theme.Material.Light.DarkActionBar")] 
Cuestiones relacionadas