2012-07-13 30 views
17

Estoy usando un tema personalizado que hereda de DarkActionBar y quiero personalizar el menú desplegable para que sea blanco como cuando se usa el tema Light Holo.Estilo menú desplegable ActionBar

que he sido capaz de cambiar el fondo a blanco usando:

<style name="MyTheme" parent="@style/Theme.Light.DarkActionBar"> 
    <item name="android:actionDropDownStyle">@style/MyDropDownNav</item> 
</style> 
<style name="MyDropDownNav"> 
    <item name="android:background">@drawable/spinner_background_white</item> 
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_whyite</item> 
    <item name="android:dropDownSelector">@drawable/selectable_background_white</item> 
</style> 

Pero no tiene ni idea de cómo cambiar el color del texto en negro. Porque después de configurar blanco dibujable el problema es que el texto no es visible porque es blanco sobre fondo blanco.

Respuesta

21

Me respondo después de un poco de investigación. Además de cuestionar el estilo tiene que:

  • Personalizar android:spinnerDropDownItemStyle para actionBarWidgetTheme cambiar su apariencia texto.
  • Además, no olvide que la lista desplegable está gestionada por el adaptador que utiliza. Entonces, si usó el estándar (simple_dropdown_item_1line), no hay problema. Pero si usó uno personalizado como yo (para poder agregar un icono) no se olvide de aplicarstyle="?attr/spinnerDropDownItemStyle" en su diseño TextView.

estilo personalizado Entonces final es:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 

<style name="Theme.myapp" parent="@style/Theme.Light.DarkActionBar"> 
    <item name="android:actionDropDownStyle">@style/myapp_DropDownNav</item>   
    <item name="android:actionBarWidgetTheme">@style/myapp.actionBarWidgetTheme</item> 
</style> 

<style name="myapp.actionBarWidgetTheme" parent="@style/Theme."> 
    <item name="android:spinnerDropDownItemStyle">@style/myapp.Widget.DropDownItem.Spinner</item> 
</style> 

<style name="myapp_DropDownNav" parent="@style/Widget.Spinner.DropDown.ActionBar"> 
    <item name="background">@drawable/spinner_background_ab_myapp</item> 
    <item name="android:background">@drawable/spinner_background_ab_myapp</item> 
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_myapp</item> 
    <item name="android:dropDownSelector">@drawable/selectable_background_myapp</item> 
</style> 

<style name="myapp.Widget.DropDownItem.Spinner" parent="Widget.DropDownItem.Spinner"> 
    <item name="android:textAppearance">@style/myapp.TextAppearance.Widget.DropDownItem</item> 
</style> 

<style name="myapp.TextAppearance.Widget.DropDownItem" parent="TextAppearance.Widget.DropDownItem"> 
    <item name="android:textColor">@color/black</item> 
</style> 

Dónde dibujables en myapp_DropDownNav son el fondo blanco los que se puede generar con ActionBar Style generator en Android Asset Studio

+5

No funciona en API 19 –

0

Mi consejo es simplemente heredar de el tema Sherlock.Light y cambie los campos aplicables a los valores oscuros. Para mi aplicación, queríamos un icono blanco "arriba" y un texto blanco para las etiquetas de acción. No proporciono versiones oscuras de mis iconos de la barra de acciones, por lo que son todos blancos de todos modos. Así que después de varias horas jugando con él y siguiendo las sugerencias de diferentes personas, finalmente encontré lo que estaba buscando en el archivo de temas de ABS.

que heredan de Sherlock.Light (bueno, técnicamente HoloEverywhereLight.Sherlock pero ...) y el cambio:

<item name="android:actionMenuTextColor">@color/White</item> 
<item name="actionMenuTextColor">@color/White</item> 
<item name="android:homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item> 
<item name="homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item> 
<item name="android:dividerVertical">@drawable/abs__list_divider_holo_dark</item> 
<item name="dividerVertical">@drawable/abs__list_divider_holo_dark</item> 

Eso es todo. Es mucho más simple y fácil que tratar de extender las clases, cambiar las cosas en el código, etc.

2

He tropezado con lo que puede ser la forma más sencilla de hacerlo. Estaba trabajando con la biblioteca de AppCompat.

<style name="ApplicationTheme" parent="@style/Theme.AppCompat"> 
    <item name="android:actionBarWidgetTheme">@style/Theme.AppCompat.Light</item> 
    <item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item> 
</style> 
+0

¡Excelente! Pero creo que solo funcionará con los temas Light.DarkActionBar. – rubenlop

Cuestiones relacionadas