theme textappearance style studio google controles apptheme android android-theme

textappearance - theme editor android studio



Styling ActionBar menĂº desplegable (4)

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

He podido 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 tengo idea de cómo cambiar el color del texto a negro. Porque después de configurar el dibujo en blanco, el problema es que el texto no es visible porque es blanco sobre fondo blanco.



Me contesto después de una investigación. Además del estilo de la pregunta, necesitas:

  • Personaliza android:spinnerDropDownItemStyle para actionBarWidgetTheme cambiando su apariencia de texto.
  • Además, no olvide que la lista desplegable es administrada por el adaptador que usa. Entonces, si simple_dropdown_item_1line el estándar ( simple_dropdown_item_1line ) no hay problema. Pero si usaste uno personalizado como yo (para poder agregar un ícono) , no olvides aplicar style="?attr/spinnerDropDownItemStyle" en tu diseño TextView.

Entonces el estilo personalizado 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>

Donde los elementos myapp_DropDownNav en myapp_DropDownNav son los de fondo blanco que puedes generar con el generador de estilo ActionBar en Android Asset Studio


Me he encontrado con la que puede ser la forma más sencilla de hacer esto. 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>


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

Heredé de Sherlock.Light (bueno, técnicamente HoloEverywhereLight.Sherlock pero ...) y 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. Es mucho más simple y fácil que tratar de extender clases, reajustar cosas en código, etc.