Alterando o ícone de estouro na barra de ação

Respostas:

255

Você pode com um estilo, mas deve adicioná-lo à declaração do tema principal.

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

Você também pode alterá-lo dinamicamente, sobre o qual vou entrar em detalhes aqui:

Alterar o ícone do menu Android Overflow de maneira programática

adneal
fonte
1
Já encontrei esta solução olhando para o código-fonte, mas obrigado :) É uma boa resposta.
pjanecze
6
NOTE que isso se aplica ao TEMA e não ao ESTILO. Fiquei preso por um tempo até que eu percebesse isso. Thx @aneal
Richard Le Mesurier
5
Isso irá travar em tablets rodando Android 3.0 (API 11), porque não gosta que as pessoas definam o estilo "android: actionOverflowButtonStyle" (provavelmente bug da plataforma). Portanto, você deve usar estilos diferentes em values-v11 / styles.xml e values-v15 / styles.xml.
Mr-IDE
10
E para usuários do ActionBarSherlock, o estilo pai é:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White
7
Para appcompat (pirulito v21 de qualquer maneira), parent="@style/Widget.AppCompat.ActionButton.Overflow"parece funcionar para mim.
fattire
16

Para aqueles que não conseguem fazer funcionar, experimente SEM o namespace "android:".

<item name="actionOverflowButtonStyle">@style/OverFlow</item>
user2968401
fonte
Obrigado cara, isso realmente ajudou. Alguém tem uma explicação para isso?
DaMachk
4
@DaMachk Se você estiver usando AppCompat, não inclua o namespace "android:".
matiash
4
  1. Altere o ícone de estouro personalizado da Actionbar em 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 o tema personalizado "MyTheme" na tag do aplicativo de AndroidManifest.xml

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

Diverta-se.@.@

Luna Kong
fonte
4

Não importa o que eu tentei fazer styles.xml, nenhuma das soluções funcionou para mim. No final, se você tiver o AppCompat 23+, o que deveria ser, esta é a maneira mais fácil de realmente funcionar:

toolbar.setOverflowIcon(drawable);
Starwave
fonte
A maneira mais precisa que encontrei!
Shubhamhackz
1

resposta de @adneal está correta (portanto, esta é apenas uma explicação do wiki da comunidade para expandi-la).

Um dos comentários sugeriu que pode haver um mal-entendido sobre como fazer isso, então minha resposta é apenas outro exemplo de como substituir a imagem do ícone de estouro.

O código a seguir é baseado nos estilos de modelo da amostra do ADT New Android Project. O código vem do styles.xmlarquivo na res/valuespasta.


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

O que este código acima faz é substituir o ícone de estouro padrão por qualquer drawable que você tenha com o nome ic_menu_moreoverflow . Se você quiser uma maneira rápida de testá-lo, use o nome do arquivo do ícone do iniciador do seu aplicativo, o que tornará óbvio como funciona.

Um recurso útil para usar ao tentar entender o ActionBarestilo é:

Lá você pode definir cores específicas a serem usadas para o ícone de estouro, e o arquivo ZIP incluirá o styles.xmlarquivo correto para você.

Richard Le Mesurier
fonte
1

Para alterar a cor do ícone de estouro, você pode apenas adicionar

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

ou

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

Isso mudará o ícone, escolherá a cor desejada e definirá como um ícone de estouro.

Navin Kumar
fonte
0

Depois de muito pesquisar quais orientações eu tenho a seguir, como:

  1. Verifique o tema no arquivo de manifesto.
  2. Em seguida, vá para res-> valores-> temas.
  3. Encontre o nome do tema neste arquivo.
  4. Adicione o item dentro do tema no theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Adicione o ícone no estilo no mesmo arquivo. Quero dizer theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Verifique o ícone personalizado que você deseja alterar

Funcionou para mim

Issac Balaji
fonte