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.
Je me réponds après une enquête… .. En plus du style de la question, vous devez:
Android:spinnerDropDownItemStyle
pour actionBarWidgetTheme
changer son apparence de texte.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
Essayez de régler itemTextAppearance
. Cela devrait réaliser ce que vous voulez.
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>
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.