Menú desplegable Styling ActionBar
Estoy usando un tema personalizado que hereda de DarkActionBar
y quiero personalizar el menú desplegable para que sea blanco al igual que cuando se usa el tema de Light Holo.
He podido cambiar el fondo a blanco usando:
- ¿Cómo puedo encontrar lo que android: attr / listChoiceIndicatorSingle apunta a?
- Cambiar el color de resaltado del elemento seleccionado para el menú del menú de menú duro
- Obtener atributos temáticos mediante programación
- Java.lang.IllegalArgumentException: Necesita utilizar un tema Theme.AppCompat (o descendente) con la biblioteca de diseño
- Cómo configurar el holo tema oscuro en una aplicación de Android?
<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 ni idea de cómo cambiar el color del texto a negro. Porque después de fijar el blanco dibujable el problema es que el texto no es visible porque es blanco en el fondo blanco.
- Crear tema personalizado descargable y aplicarlo durante el tiempo de ejecución
- Cómo: Definir elemento de tema (estilo) para el widget personalizado
- Android app onStartup - Pantalla blanca
- ¿Cómo cambio el color de acento en las alertas de tema material de Android?
- Obtener un valor de color attr basado en el tema de conjunto actual
- Problemas con el tema translúcido
- XML @style en el padre
- ¿Qué significa el valor Integer en android: theme?
Me respondo después de alguna investigación. Además del estilo de la pregunta usted necesita:
- Personalizar
android:spinnerDropDownItemStyle
paraactionBarWidgetTheme
cambiar su apariencia de texto. - También no se olvide que la lista desplegable es manejada por el adaptador que usted utiliza. Entonces si usted utilizó el estándar (
simple_dropdown_item_1line
) no hay ningún problema. Pero si usas una personalizada como yo (para poder añadir un icono) no te olvides de aplicarstyle="?attr/spinnerDropDownItemStyle"
en tu presentación 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 myapp_DropDownNav
en myapp_DropDownNav
son los de fondo blanco que puedes generar con el generador de estilo ActionBar en Android Asset Studio
Intente establecer itemTextAppearance
. Eso debe lograr lo que quieres.
He tropezado con lo que puede ser la forma más sencilla de hacer esto. Yo estaba trabajando con la biblioteca 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 Dark. Para mi aplicación, queríamos un icono blanco "arriba" y un texto blanco para las etiquetas de acción. No proveo versiones oscuras de mis iconos de barra de acción, 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.
Heredo 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. Es más simple y más fácil que tratar de extender clases, restyle cosas en el código, etc