Cambiar el icono de desbordamiento en la barra de acciones

Respuestas:

255

Puede hacerlo con un estilo, pero debe agregarlo a la declaración principal del tema.

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

También puede cambiarlo dinámicamente, sobre lo que entro en detalle aquí:

Cambiar el icono del menú de desbordamiento de Android mediante programación

adneal
fuente
1
Ya encontré esta solución buscando en el código fuente, pero gracias :) Es una buena respuesta.
pjanecze
6
TENGA EN CUENTA que esto se aplica al TEMA y no al ESTILO. Me tuvo atrapado por un tiempo hasta que me di cuenta de eso. Thx @aneal
Richard Le Mesurier
5
Esto fallará en tabletas con Android 3.0 (API 11), porque no le gusta que la gente defina el estilo "android: actionOverflowButtonStyle" (probablemente error de plataforma). Por lo tanto, debe usar diferentes estilos en values-v11 / styles.xml y values-v15 / styles.xml.
Mr-IDE
10
Y para los usuarios de ActionBarSherlock, el estilo principal es:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White
7
Para appcompat (lollipop v21 de todos modos), parent="@style/Widget.AppCompat.ActionButton.Overflow"parece funcionar para mí.
fattire
16

Para aquellos que no pueden hacer que funcione, pruebe esto SIN el espacio de nombres "android:".

<item name="actionOverflowButtonStyle">@style/OverFlow</item>
usuario2968401
fuente
Gracias amigo, esto realmente ayudó. ¿Alguien tiene una explicación para esto?
DaMachk
4
@DaMachk Si está utilizando AppCompat, no incluya el espacio de nombres "android:".
Matiash
4
  1. Cambie su icono de desbordamiento personalizado de Actionbar en 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. Coloque el tema personalizado "MyTheme" en la etiqueta de la aplicación de AndroidManifest.xml

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

Que te diviertas.@.@

Luna Kong
fuente
4

No importa lo que intenté hacer styles.xml, ninguna de las soluciones funcionó para mí. Al final, si tiene AppCompat 23+, que debería, esta es la forma más fácil que realmente funciona:

toolbar.setOverflowIcon(drawable);
Starwave
fuente
¡La forma más precisa que he encontrado!
Shubhamhackz
1

La respuesta de @adneal es correcta (por lo que esta es solo una explicación de la wiki de la comunidad para ampliarla).

Uno de los comentarios sugirió que puede haber un malentendido sobre cómo hacer esto, por lo que mi respuesta es solo otro ejemplo sobre cómo anular la imagen del icono de desbordamiento.

El código siguiente se basa en los estilos de plantilla del nuevo proyecto de Android de muestra de ADT. El código proviene del styles.xmlarchivo en la res/valuescarpeta.


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

Lo que hace este código anterior es reemplazar el icono de desbordamiento predeterminado con cualquier elemento de diseño que tenga que se llame ic_menu_moreoverflow. Si desea una forma rápida de probarlo, use el nombre de archivo del icono del iniciador de su aplicación, que hará que sea obvio cómo funciona.

Un recurso útil para utilizar cuando se intenta comprender el ActionBarestilo es:

Allí puede definir colores específicos para usar en su icono de desbordamiento, y el archivo ZIP incluirá el styles.xmlarchivo correcto para usted.

Richard Le Mesurier
fuente
1

Para cambiar el color del icono de desbordamiento, simplemente puede agregar

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

o

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

Cambiará el icono, elegirá el color que desee y lo establecerá como un icono de desbordamiento.

Navin Kumar
fuente
0

Después de una larga búsqueda, obtuve la guía a seguir:

  1. Verifique el tema en el archivo de manifiesto.
  2. Luego ve a res-> valores-> temas.
  3. Busque el nombre del tema en este archivo.
  4. Agregue el elemento dentro del tema en theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Agregue el icono en el estilo en el mismo archivo, me refiero a theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Mira el icono personalizado que quieres cambiar.

Funcionó para mi

Issac Balaji
fuente