Überlaufsymbol in der Aktionsleiste ändern

Antworten:

255

Sie können mit einem Stil, aber Sie müssen ihn der Hauptthema-Deklaration hinzufügen.

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

Sie können es auch dynamisch ändern, worauf ich hier näher eingehen möchte:

Programmgesteuertes Ändern des Android Overflow-Menüsymbols

adneal
quelle
1
Ich habe diese Lösung bereits im Quellcode gefunden, aber danke :) Es ist eine gute Antwort.
Pjanecze
6
HINWEIS: Dies gilt für das THEMA und nicht für den STIL. Hatte mich eine Weile festgefahren, bis ich das merkte. Thx @aneal
Richard Le Mesurier
5
Dies stürzt auf Tablets mit Android 3.0 (API 11) ab, da es nicht gefällt, wenn Leute den Stil "android: actionOverflowButtonStyle" definieren (wahrscheinlich Plattformfehler). Daher müssen Sie in values-v11 / styles.xml und values-v15 / styles.xml unterschiedliche Stile verwenden.
Mr-IDE
10
Und für ActionBarSherlock-Benutzer ist der übergeordnete Stil:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White
7
Für Appcompat (v21 Lollipop sowieso) parent="@style/Widget.AppCompat.ActionButton.Overflow"scheint das bei mir zu funktionieren.
Fett
16

Für diejenigen, die es nicht zum Laufen bringen können, versuchen Sie dies OHNE den Namespace "android:".

<item name="actionOverflowButtonStyle">@style/OverFlow</item>
user2968401
quelle
Danke Kumpel, das hat wirklich geholfen. Hat jemand eine Erklärung dafür?
DaMachk
4
@DaMachk Wenn Sie AppCompat verwenden, geben Sie den Namespace "android:" nicht an.
Matiash
4
  1. Ändern Sie Ihr benutzerdefiniertes Überlaufsymbol der Aktionsleiste in 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. Fügen Sie das benutzerdefinierte Thema "MyTheme" in das Anwendungstag von AndroidManifest.xml ein

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

Habe Spaß.@.@

Luna Kong
quelle
4

Egal, was ich versuchte styles.xml, keine der Lösungen funktionierte für mich. Wenn Sie AppCompat 23+ haben, was Sie sollten, ist dies der einfachste Weg, der tatsächlich funktioniert:

toolbar.setOverflowIcon(drawable);
Starwave
quelle
Der genaueste Weg, den ich gefunden habe!
Shubhamhackz
1

Die Antwort von @ adneal ist korrekt (dies ist also nur eine Erklärung des Community-Wikis, um sie zu erweitern).

Einer der Kommentare deutete darauf hin, dass es möglicherweise zu Missverständnissen kommt, daher ist meine Antwort nur ein weiteres Beispiel für das Überschreiben des Überlaufsymbolbilds.

Der folgende Code basiert auf den Vorlagenstilen aus dem ADT-Beispiel für ein neues Android-Projekt. Der Code stammt aus der styles.xmlDatei im res/valuesOrdner.


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

Was dies oben Code tut , ist das Standard - Überlauf - Symbol ersetzen mit dem, was drawable Sie haben , dass gestattet ic_menu_moreoverflow. Wenn Sie es schnell testen möchten, verwenden Sie den Dateinamen des Startsymbols Ihrer App, um zu verdeutlichen, wie es funktioniert.

Eine nützliche Ressource für den Versuch, das ActionBarStyling zu verstehen , ist:

Dort können Sie bestimmte Farben definieren, die für Ihr Überlaufsymbol verwendet werden sollen, und die ZIP-Datei enthält die richtige styles.xmlDatei für Sie.

Richard Le Mesurier
quelle
1

Für die Farbänderung des Überlaufsymbols können Sie einfach hinzufügen

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

oder

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

Das Symbol wird geändert, die gewünschte Farbe ausgewählt und als Überlaufsymbol festgelegt.

Navin Kumar
quelle
0

Nach langer Suche bekam ich die Anleitung, der ich folgen musste:

  1. Überprüfen Sie das Thema in der Manifestdatei.
  2. Gehen Sie dann zu res-> Werte-> Themen.
  3. Suchen Sie den Namen des Themas in dieser Datei.
  4. Fügen Sie das Element innerhalb des Themas in der Datei theme.xml hinzu:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Fügen Sie das Symbol im Stil in derselben Datei hinzu, die ich meine theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Überprüfen Sie das benutzerdefinierte Symbol, das Sie ändern möchten

Es hat bei mir funktioniert

Issac Balaji
quelle