web-dev-qa-db-fra.com

Menu déroulant Styling ActionBar

J'utilise un thème personnalisé qui hérite de DarkActionBar et je souhaite personnaliser le menu déroulant afin qu'il soit blanc comme lors de l'utilisation du thème Light Holo.

J'ai pu changer le fond en blanc en utilisant:

<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>

Mais je ne sais pas comment changer la couleur du texte en noir. Parce que, après avoir défini le dessin en blanc, le problème est que le texte n’est pas visible car il est blanc sur fond blanc.

17
lujop

Je me réponds après une enquête… .. En plus du style de la question, vous devez:

  • Personnaliser Android:spinnerDropDownItemStyle pour actionBarWidgetTheme changer son apparence de texte.
  • N'oubliez pas non plus que la liste déroulante est gérée par l'adaptateur que vous utilisez. Ensuite, si vous utilisez le standard (simple_dropdown_item_1line), il n'y a pas de problème. Mais si vous en avez utilisé une comme moi (pour pouvoir ajouter une icône) n'oubliez pas de l'appliquerstyle="?attr/spinnerDropDownItemStyle" dans votre mise en page TextView.

Ensuite, le style personnalisé final est:

<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>

Lorsque myapp_DropDownNav est dessinable, il s’agit de fonds blancs que vous pouvez générer avec Générateur de styles ActionBar in Android Asset Studio

21
lujop

Essayez de régler itemTextAppearance . Cela devrait réaliser ce que vous voulez.

3
Jason Robinson

Je suis tombé sur ce qui pourrait être le moyen le plus simple de le faire. Je travaillais avec la bibliothèque 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>
2
Georgie

Mon conseil est simplement d'hériter du thème Sherlock.Light et de modifier les champs applicables en valeurs sombres. Pour mon application, nous voulions une icône blanche "en haut" et un texte blanc pour les libellés d'action. Je ne fournis pas de versions sombres de mes icônes de barre d'actions, elles sont donc toutes blanches. Ainsi, après plusieurs heures de travail et de suivi des suggestions de différentes personnes, j'ai finalement trouvé ce que je cherchais dans le fichier de thèmes ABS. 

J'hérite de Sherlock.Light (enfin, techniquement, HoloEverywhereLight.Sherlock mais ...) et change:

<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>

C'est tout. C'est beaucoup plus simple et plus facile que d'essayer d'étendre les classes, de reformuler les choses en code, etc.

0
toadzky