2012-07-03 23 views
11

¿Hay alguna manera de cambiar el color de fondo de la barra de pestañas en la Barra de acciones sin cambiarla en la versión de una línea?Cambiar color de fondo ActionBar Tabs

Para aclarar lo que quiero: en modo retrato, la barra de acciones se divide en dos líneas, la barra de acciones en sí y las pestañas siguientes. En el modo horizontal, las pestañas están en la barra de acciones actual.

Quiero cambiar el color de fondo del modo de retrato. Si cambio el fondo en TabView, se cambiará para ambos modos. ¿Tengo que crear estilos separados para esos? Lo cual hace surgir una segunda pregunta: ¿hay alguna manera de saber cuándo serán dos líneas y cuándo no?

¿O simplemente me falta algo?

estoy usando ActionBarSherlock por cierto

+0

Quizás esto puede ayudar: http://stackoverflow.com/questions/10064411/change-actionbarsherlock-background-color – 0gravity

+1

No, el problema no es el fondo de la barra de acciones, sino el fondo de la barra de pestañas. –

Respuesta

41

creo que busca el atributo android:backgroundStacked del estilo de la Barra de acciones:

<style name="MyTheme" parent="android:Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item> 
</style> 

<style name="MyActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid"> 
    <item name="android:backgroundStacked">@drawable/my_stacked_background</item> 
</style> 

o (Si se utiliza ActionBarSherlock):

<style name="MyTheme" parent="@style/Theme.Sherlock.Light"> 
    <item name="android:actionBarStyle">@style/MyActionBarStyle</item> 
    <item name="actionBarStyle">@style/MyActionBarStyle</item> 
</style> 

<style name="MyActionBarStyle" parent="@style/Widget.Sherlock.Light.ActionBar.Solid"> 
    <item name="android:backgroundStacked">@drawable/my_stacked_background</item> 
    <item name="backgroundStacked">@drawable/my_stacked_background</item> 
</style> 
+2

¡Esta es la respuesta correcta! –

+1

¿Puede explicar cómo hacer que esto funcione con el tema holo light predeterminado? ¿Cómo lo llamas? ¿Cómo llamas en el manifiesto? Esto no funciona –

3

En ActionBarSherlock de values/abs__themes.xml hay

<item name="actionModeSplitBackground">@drawable/abs__cab_background_bottom_holo_dark</item> 

Usted tiene que crear su propio tema deriva de ABS

<style name="AppTheme" parent="Theme.Sherlock"> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" parent="Widget.Sherlock.ActionBar"> 
    <item name="actionModeSplitBackground">@drawable/my_split_background</item> 
</style> 

la esperanza que esto le ayuda.

+0

Eso es lo que pensé que podría ser, pero no cambia nada. –

+0

¿Ha aplicado este tema a su aplicación en AndroidManifest.xml? – vasart

+0

Sí. Pero es el valor equivocado. Si observa el activo real (abs__cab_background_bottom_holo_dark), la barra azul que se está utilizando para mostrar que está seleccionado está en la parte superior, no en la inferior. Además, no hay modos diferentes para seleccionar/deseleccionar, etc. –

0

para separar estilos dependiendo de la orientación que tiene que crear en la carpeta de /res una nueva carpeta llamada layout-land (para el modo horizontal) y layout-port (en modo vertical) y poner los archivos XML para la barra de acción y establecer su estilo específico (con el color que desea) en cada carpeta.

+0

Gracias, soy consciente de eso. Pero no es solo paisaje/retrato. Supongo que en las tabletas siempre habrá una sola línea.Sé que también puedo tener estilos separados para pantallas grandes, etc. pero no sé qué modo se usará en qué configuración. –

23

para cambiar el color de actionbar Tab, Plsusethe este código:

// Por ejemplo, si desea el color blanco como fondo de pestañas, entonces

getActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF"))); 
+0

Awesome código puro :) – ROR

+0

Gracias @ROR;) –

+0

gran ans :) gracias :) – Nevaeh

1
ColorDrawable colorDrawable = new ColorDrawable(Color.White); 
actionBar.SetStackedBackgroundDrawable(colorDrawable); 

para xamarin amigos.

+0

Un poco de explicación mejoraría esta respuesta. –

Cuestiones relacionadas