it-swarm.com.de

Aktionsleisten-Dropdown-Menü gestalten

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.

17
lujop

Ich beantworte mich selbst nach einigen Nachforschungen. Zusätzlich zum Styling der Fragen müssen Sie:

  • Passen Sie Android:spinnerDropDownItemStyle für actionBarWidgetTheme an, um das Aussehen des Textes zu ändern.
  • Vergessen Sie auch nicht, dass die Dropdown-Liste vom verwendeten Adapter verwaltet wird. Wenn Sie dann den Standardcode (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

21
lujop

Versuchen Sie, itemTextAppearance einzustellen. Das sollte erreichen, was Sie wollen.

3
Jason Robinson

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

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.

0
toadzky