Ich verwende ein benutzerdefiniertes Design, das von DarkActionBar
erbt, und ich möchte das Dropdown-Menü so anpassen, dass es weiß wird, wenn das Light Holo-Design verwendet wird.
Ich konnte den Hintergrund in weiß ändern:
<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>
Ich habe jedoch keine Ahnung, wie ich die Textfarbe in Schwarz ändern kann. Nach dem Festlegen von Weißem Zeichnen besteht das Problem darin, dass Text nicht sichtbar ist, da er weiß auf weißem Hintergrund ist.
Ich beantworte mich selbst nach einigen Nachforschungen. Zusätzlich zum Styling der Fragen müssen Sie:
Android:spinnerDropDownItemStyle
für actionBarWidgetTheme
an, um das Aussehen des Textes zu ändern.simple_dropdown_item_1line
) verwenden, ist das kein Problem. Wenn Sie jedoch ein benutzerdefiniertes Symbol wie mich verwendet haben (um ein Symbol hinzufügen zu können) Vergessen Sie nicht, sich zu bewerbenstyle="?attr/spinnerDropDownItemStyle"
in Ihrem Layout TextView.Der endgültige benutzerdefinierte Stil ist dann:
<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>
Wobei Drawables in myapp_DropDownNav
weiße Hintergrundobjekte sind, die Sie mit ActionBar Style Generator generieren können in Android Asset Studio
Versuchen Sie, itemTextAppearance
einzustellen. Das sollte erreichen, was Sie wollen.
Ich bin über den möglicherweise einfachsten Weg gestolpert. Ich arbeitete mit der AppCompat-Bibliothek.
<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>
Mein Rat ist, einfach vom Sherlock.Light-Thema zu erben und die entsprechenden Felder in die Dark-Werte zu ändern. Für meine App wollten wir ein weißes "Up" -Symbol und weißen Text für die Aktionsbeschriftungen. Ich habe keine dunklen Versionen meiner Actionbar-Symbole, daher sind sie sowieso alle weiß. Nachdem ich einige Stunden damit herumgespielt hatte und den Vorschlägen anderer Personen gefolgt war, fand ich endlich das, wonach ich gesucht hatte, in der ABS-Themendatei.
Ich erbe von Sherlock.Light (naja, technisch gesehen HoloEverywhereLight.Sherlock aber ...) und ändere:
<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>
Das ist es. Es ist viel einfacher und einfacher als zu versuchen, Klassen zu erweitern, Dinge im Code umzugestalten usw.