Modification de l'icône de débordement dans la barre d'actions


Réponses:


255

Vous pouvez avec un style, mais vous devez l'ajouter à la déclaration de thème principale.

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

Vous pouvez également le modifier dynamiquement, ce que je vais détailler ici:

Modification de l'icône du menu Android Overflow par programmation


1
J'ai déjà trouvé cette solution en regardant dans le code source, mais merci :) C'est une bonne réponse.
pjanecze

6
Notez que cela s'applique au THÈME et non au STYLE. J'étais coincé pendant un moment jusqu'à ce que je m'en rende compte. Thx @aneal
Richard Le Mesurier

5
Cela plantera sur les tablettes fonctionnant sous Android 3.0 (API 11), car il n'aime pas que les gens définissent le style "android: actionOverflowButtonStyle" (probablement un bug de plate-forme). Vous devez donc utiliser différents styles dans values-v11 / styles.xml et values-v15 / styles.xml.
Mr-IDE

10
Et pour les utilisateurs d'ActionBarSherlock, le style parent est:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White

7
Pour appcompat (v21 lollipop de toute façon), parent="@style/Widget.AppCompat.ActionButton.Overflow"semble fonctionner pour moi.
fattire

16

Pour ceux qui ne peuvent pas le faire fonctionner, essayez ceci SANS l'espace de noms "android:".

<item name="actionOverflowButtonStyle">@style/OverFlow</item>

Merci mon pote, cela a vraiment aidé. Quelqu'un a-t-il une explication à cela?
DaMachk

4
@DaMachk Si vous utilisez AppCompat, n'incluez pas l'espace de noms "android:".
matiash

4
  1. Modifiez votre icône de débordement personnalisée d'Actionbar dans 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. Placez le thème personnalisé "MyTheme" dans la balise d'application d'AndroidManifest.xml

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

S'amuser.@.@


4

Peu importe ce que j'ai essayé de faire styles.xml, aucune des solutions n'a fonctionné pour moi. En fin de compte, si vous avez AppCompat 23+, ce que vous devriez, c'est le moyen le plus simple qui fonctionne réellement:

toolbar.setOverflowIcon(drawable);

Le moyen le plus précis que j'ai trouvé!
Shubhamhackz le

1

Réponse de @ adneal est correcte (il ne s'agit donc que d'une explication du wiki de la communauté pour la développer).

L'un des commentaires suggérait qu'il pouvait y avoir un malentendu sur la façon de procéder, donc ma réponse est juste un autre exemple sur la façon de remplacer l'image de l'icône de débordement.

Le code ci-dessous est basé sur les styles de modèle de l'exemple ADT New Android Project. Le code provient du styles.xmlfichier dans le res/valuesdossier.


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

Ce que ce code ci-dessus fait est de remplacer l'icône de débordement par défaut par le dessinable que vous avez nommé ic_menu_moreoverflow . Si vous voulez un moyen rapide de le tester, utilisez le nom de fichier de l'icône du lanceur de votre application, ce qui rendra évident son fonctionnement.

Une ressource utile à utiliser pour comprendre le ActionBarstyle est:

Là, vous pouvez définir des couleurs spécifiques à utiliser pour votre icône de débordement, et le fichier ZIP inclura le styles.xmlfichier qui vous convient.


1

Pour le changement de couleur de l'icône de débordement, vous pouvez simplement ajouter

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

ou

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

Cela changera l'icône, choisira la couleur de votre choix et la définira comme Overflowicon.


0

Après une longue recherche, j'ai obtenu les conseils à suivre comme:

  1. Vérifiez le thème dans le fichier manifeste.
  2. Ensuite, allez dans res-> values-> themes.
  3. Trouvez le nom du thème dans ce fichier.
  4. Ajoutez l'élément dans le thème dans le theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Ajoutez l'icône dans le style dans le même fichier que je veux dire theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Découvrez l'icône personnalisée que vous souhaitez modifier

Ça a marché pour moi

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.