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

111

Est-il possible de changer l'icône de débordement dans la barre d'action? J'ai des icônes bleues pour tous les éléments ActionBar et je souhaite également modifier l'icône de débordement lorsqu'elle apparaît.

pjanecze
la source
@ShirishHerwade: Ce lien est mort maintenant.
Al Lelopath

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

adné
la source
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>
user2968401
la source
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.@.@

Luna Kong
la source
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);
Starwave
la source
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.

Richard Le Mesurier
la source
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.

Navin Kumar
la source
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

Issac Balaji
la source