Odpowiedzi:
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:
parent="Widget.Sherlock.ActionButton.Overflow"
parent="@style/Widget.AppCompat.ActionButton.Overflow"
Wydaje mi się , że dla appcompat (w każdym razie V21 Lollipop) działa.
Dla tych, którzy nie mogą go uruchomić, wypróbuj to BEZ przestrzeni nazw „android:”.
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
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>
Umieść motyw niestandardowy „MyTheme” w tagu aplikacji AndroidManifest.xml
<application
android:name="com.example.android.MainApp"
android:theme="@style/AppTheme">
</application>
Baw się dobrze.@.@
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);
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.xml
pliku w res/values
folderze.
<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 ActionBar
styló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.xml
plik.
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.
Po długich poszukiwaniach otrzymałem wskazówki, których należy przestrzegać:
Dodaj element w motywie w pliku theme.xml:
<item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
<item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
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>
Sprawdź niestandardową ikonę, którą chcesz zmienić
U mnie to zadziałało