Изменение значка переполнения на панели действий

111

Можно ли изменить значок переполнения на панели действий? У меня есть синие значки для всех элементов ActionBar, и я также хочу изменить значок переполнения, когда он появляется.

pjanecze
источник
@ShirishHerwade: Эта ссылка сейчас мертва.
Al Lelopath

Ответы:

255

Вы можете со стилем, но вы должны добавить его в основное объявление темы.

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

Вы также можете изменять его динамически, о чем я подробно расскажу здесь:

Программное изменение значка меню Android Overflow

надпочечник
источник
1
Я уже нашел это решение, глядя в исходный код, но спасибо :) Это хороший ответ.
pjanecze
6
ОБРАТИТЕ ВНИМАНИЕ, что это относится к ТЕМЕ, а не к СТИЛЮ. Задержал меня на некоторое время, пока не понял это. Thx @aneal
Ричард Ле Мезурье
5
Это приведет к сбою на планшетах под управлением Android 3.0 (API 11), потому что ему не нравятся люди, определяющие стиль «android: actionOverflowButtonStyle» (возможно, ошибка платформы). Поэтому вам нужно использовать разные стили в values-v11 / styles.xml и values-v15 / styles.xml.
Mr-IDE
10
А для пользователей ActionBarSherlock родительский стиль:parent="Widget.Sherlock.ActionButton.Overflow"
Ник Уайт,
7
Для appcompat (в любом случае леденец v21), parent="@style/Widget.AppCompat.ActionButton.Overflow"похоже, работает для меня.
fattire
16

Для тех, кто не может заставить его работать, попробуйте это БЕЗ пространства имен "android:".

<item name="actionOverflowButtonStyle">@style/OverFlow</item>
user2968401
источник
Спасибо, дружище, это действительно помогло. У кого-нибудь есть объяснение этому?
DaMachk
4
@DaMachk Если вы используете AppCompat, не включайте пространство имен "android:".
матиаш
4
  1. Измените свой собственный значок переполнения панели действий в 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. Поместите пользовательскую тему "MyTheme" в тег приложения AndroidManifest.xml.

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

Радоваться, веселиться.@.@

Луна Конг
источник
4

Независимо от того, что я пытался сделать styles.xml, ни одно из решений у меня не помогло. В конце концов, если у вас есть AppCompat 23+, что вам нужно, это самый простой способ, который действительно работает:

toolbar.setOverflowIcon(drawable);
Звездная волна
источник
Самый точный способ, который я нашел!
Shubhamhackz
1

Ответ @adneal правильный (так что это просто объяснение сообщества вики, чтобы расширить его).

Один из комментариев предполагает, что может быть непонимание того, как это сделать, поэтому мой ответ - просто еще один пример того, как переопределить изображение значка Overflow.

Код ниже основан на стилях шаблона из примера ADT New Android Project. Код взят из styles.xmlфайла в res/valuesпапке.


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

Этот код выше заменяет значок переполнения по умолчанию на любой имеющийся у вас объект с именем ic_menu_moreoverflow. Если вам нужен быстрый способ проверить это, используйте имя файла значка запуска вашего приложения, чтобы было понятно, как оно работает.

Полезный ресурс для понимания ActionBarстиля:

Здесь вы можете определить определенные цвета, которые будут использоваться для вашего значка переполнения, и ZIP-файл будет содержать нужный styles.xmlвам файл.

Ришар Ле Мезурье
источник
1

Для изменения цвета значка переполнения вы можете просто добавить

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

или

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

Он изменит значок, выберет любой желаемый цвет и установит значок переполнения.

Навин Кумар
источник
0

После долгих поисков я получил рекомендации, которым нужно следовать:

  1. Проверьте тему в файле манифеста.
  2. Затем перейдите в res-> values-> themes.
  3. Найдите название темы в этом файле.
  4. Добавьте элемент в тему в theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Добавьте иконку в стиле в том же файле, я имею в виду theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Проверьте пользовательский значок, который вы хотите изменить

Это сработало для меня

Иссак Баладжи
источник