2013-10-22 11 views
7

moja aplikacja tematem wygląda jak pokazano na poniższym zrzucie ekranu:Jak zmienić ikonę przepełnienia paska działań kontekstowych bez zmiany go na standardowy pasek akcji?

action bar with white overflow icon

Jako motyw oparty jest na Theme.Holo.Light który zawiera teksty ciemny pasek akcji i ikonę przepełnienia, ja dostosować ikonę przepełnienia stosując następujący styl:

<style name="ActionBar.Light" parent="android:style/Widget.Holo.ActionBar"> 
    <item name="android:background">@color/highlight</item> 
    <item name="android:titleTextStyle">@style/TextAppearance.ActionBar.Title.Light</item> 
    <item name="android:subtitleTextStyle">@style/TextAppearance.ActionBar.Subtitle.Light</item> 
</style> 
... 
<style name="Theme.Light" parent="@android:style/Theme.Holo.Light"> 
    ... 
    <item name="android:actionBarStyle">@style/ActionBar.Light</item> 
    <item name="android:actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item> 
    ... 
</style> 

Gdy jeden lub więcej wpisów listy są sprawdzane chcę pokazać białą kontekstowy pasek akcji, ale niestety biały ikona przepełnienia nie jest widoczne na białym tle:

contextual action bar with white overflow icon on white background

Każdy pomysł, jak zmienić ikonę przepełnienia tylko dla paska kontekstowego - za pomocą stylu lub programowo?

Ostateczne Rozwiązanie (27 lutego 2014)

Wydaje się, że nie jest to możliwe, aby zmienić ikonę przepełnienia z kontekstowego paska akcji niezależny od jednego standardowego paska działań. Więc nie miałem innego wyboru, ale zmieniając kolor tła paska kontekstowego do ciemnoszarego, aby biały przycisk przepełnienia visible:

gray contextual action bar

Ikony po prawej są pod moją kontrolą, więc było łatwo je zmienić. Ikonę "zrobione" po lewej i tekst (licznik czeku) można łatwo zmienić za pomocą atrybutów motywu. Tylko cienki separator pomiędzy ikoną "done" i licznikiem czeków nie może zostać zmieniony przy użyciu atrybutów. Wymagałoby to niestandardowego układu - dlatego zostawiłem to, jak jest na razie.

Oto mój pasek kontekstowy styl i odpowiednia część z tematem:

<style name="TextAppearance.ActionBar.Title" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:fontFamily">sans-serif-light</item> 
</style> 
<style name="TextAppearance.ActionBar.Title.Light"> 
    <item name="android:textColor">#ffffff</item> 
</style> 

<style name="ContextualBar.Light" parent="android:style/Widget.Holo.ActionMode"> 
    <item name="android:background">#666666</item> 
    <item name="android:titleTextStyle">@style/TextAppearance.ActionBar.Title.Light</item> 
    <item name="android:actionMenuTextColor">#ffffff</item> 
</style> 

<style name="Theme.Light" parent="@android:style/Theme.Holo.Light"> 
    ... 
    <item name="android:actionBarStyle">@style/ActionBar.Light</item> 
    <item name="android:actionModeStyle">@style/ContextualBar.Light</item> 
    <item name="android:actionModeCloseDrawable">@drawable/ic_action_done</item> 
    <item name="android:actionOverflowButtonStyle">@android:style/Widget.Holo.ActionButton.Overflow</item> 
    <item name="android:actionMenuTextColor">#ffffff</item> 
    ... 
</style> 

Ogłoszenia: Można zobaczyć pełny rezultat w the final app "uPod" która jest dostępna w Google Play!

+0

Może być łatwiej po prostu zmienić kontekstowe bar działanie kolor tła do pewnego jasnoniebieskim. –

+0

hej, wymyśliłeś to? uderzyłem w ten sam problem – Zen

+0

@alexsummers Wydaje się, że nie ma tam po prostu różnych ikon przepełnienia dla standardowego i kontekstowego paska akcji. Zmieniłem tło paska kontekstowego na ciemnoszary, aby białe ikony stały się widoczne. – sven

Odpowiedz

2

od kompozycji i zakładając, że używając AppCompat

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:actionOverflowButtonStyle">@style/OverFlowStyle</item> 
</style> 
<style name="OverFlowStyle" parent="Widget.AppCompat.ActionButton.Overflow"> 
    <item name="android:src">@drawable/your_selector_drawable_here</item> 
</style> 
+0

Używam natywnego paska działań. I o ile widzę, twój styl zmieni ikonę zarówno dla trybu normalnego, jak i kontekstowego. Chcę mieć różne ikony dla trybu normalnego i kontekstowego. – sven

Powiązane problemy