Zmiana ikony przepełnienia na pasku akcji

Odpowiedzi:

255

Możesz ze stylem, ale musisz dodać go do głównej deklaracji motywu.

<resources>
    <!-- Base application theme. -->
    <style name="Your.Theme" parent="@android:style/Theme.Holo">
        <!-- Pointer to Overflow style ***MUST*** go here or it will not work -->
        <item name="android:actionOverflowButtonStyle">@style/OverFlow</item>
    </style>

    <!-- Styles -->
    <style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
        <item name="android:src">@drawable/ic_action_overflow</item>
    </style>

</resources>

Możesz również zmienić to dynamicznie, o czym szczegółowo omówię tutaj:

Programowa zmiana ikony menu Android Overflow

adneal
źródło
1
Już znalazłem to rozwiązanie zaglądając do kodu źródłowego, ale dzięki :) To dobra odpowiedź.
pjanecze
6
PAMIĘTAJ, że dotyczy to TEMATU, a nie STYLU. Utknąłem na chwilę, zanim to zrozumiałem. Thx @aneal
Richard Le Mesurier
5
Spowoduje to awarię na tabletach z systemem Android 3.0 (API 11), ponieważ nie lubi osób definiujących styl „android: actionOverflowButtonStyle” (prawdopodobnie błąd platformy). Musisz więc użyć różnych stylów w values-v11 / styles.xml i values-v15 / styles.xml.
Mr-IDE
10
A dla użytkowników ActionBarSherlock stylem nadrzędnym jest:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White
7
parent="@style/Widget.AppCompat.ActionButton.Overflow"Wydaje mi się , że dla appcompat (w każdym razie V21 Lollipop) działa.
fattire
16

Dla tych, którzy nie mogą go uruchomić, wypróbuj to BEZ przestrzeni nazw „android:”.

<item name="actionOverflowButtonStyle">@style/OverFlow</item>
user2968401
źródło
Dzięki stary, to naprawdę pomogło. Czy ktoś ma na to wyjaśnienie?
DaMachk
4
@DaMachk Jeśli używasz AppCompat, nie dodawaj przestrzeni nazw „android:”.
matiash
4
  1. Zmień niestandardową ikonę przepełnienia paska akcji w styles.xml.

     <resources>
        <!-- Base application theme. -->
        <style name=“MyTheme" parent="@android:style/Theme.Holo">
           <!-- Pointer to Overflow style DONT forget! -->
           <item name="android:actionOverflowButtonStyle">@style/MyOverFlow</item>
        </style>
    
        <!-- Styles -->
        <style name="MyOverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
            <item name="android:src">@drawable/ic_your_action_overflow</item>
        </style>
     </resources>
  2. Umieść motyw niestandardowy „MyTheme” w tagu aplikacji AndroidManifest.xml

    <application
        android:name="com.example.android.MainApp"
        android:theme="@style/AppTheme">
    </application>

Baw się dobrze.@.@

Luna Kong
źródło
4

Bez względu na to, co próbowałem zrobić styles.xml, żadne z rozwiązań nie zadziałało. Ostatecznie, jeśli masz AppCompat 23+, co powinieneś, to najłatwiejszy sposób, który faktycznie działa:

toolbar.setOverflowIcon(drawable);
Starwave
źródło
Najdokładniejszy sposób, jaki znalazłem!
Shubhamhackz
1

Odpowiedź @ adneal jest prawidłowa (więc jest to tylko wyjaśnienie wiki społeczności, aby ją rozwinąć).

Jeden z komentarzy sugerował, że może istnieć nieporozumienie, jak to zrobić, więc moja odpowiedź jest tylko kolejnym przykładem, jak zastąpić obraz ikony Przepełnienie.

Poniższy kod jest oparty na stylach szablonów z przykładowego nowego projektu systemu Android w narzędziu ADT. Kod pochodzi z styles.xmlpliku w res/valuesfolderze.


<style name="AppBaseTheme" parent="android:Theme.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.

    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">

    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="android:actionOverflowButtonStyle">@style/OverflowMenuButton</item>
</style>

<style name="OverflowMenuButton" parent="@android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_menu_moreoverflow</item>
</style>

To, co robi powyższy kod, to zastąpienie domyślnej ikony przepełnienia dowolnym rysunkiem, który ma nazwę ic_menu_moreoverflow. Jeśli chcesz szybko to przetestować, użyj nazwy pliku ikony programu uruchamiającego aplikacji, dzięki czemu będzie oczywiste, jak to działa.

Przydatnym źródłem do zrozumienia ActionBarstylów jest:

Tam możesz zdefiniować określone kolory, które będą używane dla ikony przepełnienia, a plik ZIP będzie zawierał właściwy styles.xmlplik.

Richarda Le Mesuriera
źródło
1

Aby zmienić kolor ikony przepełnienia, możesz po prostu dodać

toolbar.setOverflowicon(getDrawable(R.id.whiteIcon));

lub

toolbar.setOverflowicon(getDrawable(R.id.redIcon));

Zmieni ikonę, wybierz dowolny kolor i ustawi jako Overflowicon.

Navin Kumar
źródło
0

Po długich poszukiwaniach otrzymałem wskazówki, których należy przestrzegać:

  1. Sprawdź motyw w pliku manifestu.
  2. Następnie przejdź do res-> values-> themes.
  3. Znajdź nazwę motywu w tym pliku.
  4. Dodaj element w motywie w pliku theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Dodaj ikonę w stylu w tym samym pliku mam na myśli theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Sprawdź niestandardową ikonę, którą chcesz zmienić

U mnie to zadziałało

Issac Balaji
źródło