如何更改操作栏中的选项菜单图标?

Posted

技术标签:

【中文标题】如何更改操作栏中的选项菜单图标?【英文标题】:How to change option menu icon in the action bar? 【发布时间】:2014-12-05 16:27:36 【问题描述】:

如何更改选项菜单的索引图标?

我的意思是图标 (3)。

这是我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options, menu);

    return true;

这里是 XML 文件:

<item android:id="@+id/Bugreport"
    android:title="@string/option_bugreport" />

<item android:id="@+id/Info"
    android:title="@string/option_info" />

<item android:id="@+id/About"
    android:title="@string/option_about" />

【问题讨论】:

【参考方案1】:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
            android:id="@+id/logout"
            android:icon="@drawable/logout"
            android:title="Log Out"
            app:showAsAction="always"
        />
</menu>

这对我有用!

【讨论】:

【参考方案2】:

看看这可能有效:(在 kotlin 中)

toolBar.menu.getItem(indexNumber).setIcon(R.drawable.ic_myIcon)

【讨论】:

【参考方案3】:

这对我有用,只需像这样设置您的 xml 菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:icon="@drawable/your_icon"
        android:title="menu"
        app:showAsAction="always">
        <menu>

            <item
                android:id="@+id/action_menu1"
                android:orderInCategory="1"
                android:title="menu 1" />

            <item
                android:id="@+id/action_menu2"
                android:orderInCategory="2"
                android:title="menu 2" />

        </menu>
    </item>
</menu>

【讨论】:

【参考方案4】:

如果您想以编程方式更改操作栏/工具栏中的图标/标题菜单,

一步一步

    在类中声明菜单

private var mMenu:菜单? = 空

    重写 onCreateOptionsMenu 方法并找到需要更改的项目

    override fun onCreateOptionsMenu(menu: Menu?): Boolean 
    mMenu = menu
    menuInflater.inflate(R.menu.menu, menu)
    if (mIsFavorite)
        mMenu?.findItem(R.id.action_favorite)?.icon = yourDrawable
     else 
        mMenu?.findItem(R.id.action_favorite)?.icon = yourDrawable
    
    return true
    

    在执行 onCreateOptionsMenu 后,使用 invalidateOptionsMenu() 更新菜单中的一些更改。此方法将重新创建菜单

【讨论】:

【参考方案5】:

这在我的情况下正常工作:

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),
                                              R.drawable.change_pass);
toolbar.setOverflowIcon(drawable);

【讨论】:

在使用val toolbar = findViewById&lt;Toolbar&gt;(R.id.action_bar)toolbar.overflowIcon = Util.getDrawable(R.drawable.ic_menu)&lt;style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"&gt;时不起作用【参考方案6】:

更改选项菜单索引图标颜色的简单方法是:

<!-- android:textColorSecondary is the color of the menu overflow icon (three vertical dots) -->
<item name="android:textColorSecondary">@color/optionMenuIconColor</item>

将以上代码行添加到 style.xml(自定义主题)文件中, 希望得到答复,谢谢。

【讨论】:

即使有效,这也是愚蠢的做法;它改变了实际辅助应用程序的文本颜色,在许多地方和小部件中用作 - 你猜对了 - 文本颜色。 @Adrian Cretu 是的,如果您不尝试全局匹配文本和图标颜色,那可能会很愚蠢。否则看起来很容易也很合理。 我们说的是图标,不是颜色,你的回答会改变很多项目的颜色【参考方案7】:

以下行应在 app -> main -> res -> values -> Styles.xml 中更新

 <!-- 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/MyActionButtonOverflow</item>
</style>

<!-- Style to replace actionbar overflow icon. set item 'android:actionOverflowButtonStyle' in AppTheme -->
<style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_launcher</item>
    <item name="android:background">?android:attr/actionBarItemBackground</item>
    <item name="android:contentDescription">"Lala"</item>
</style>

这是可以做到的。如果要更改操作栏中的溢出图标

【讨论】:

@smartmouse 如果您遇到任何问题,请告诉我 欢迎您,我很高兴为您提供帮助,实际上并没有这样的需求,但是我们给出的每张图片都对此进行了描述,这就是我使用它的原因,“lala”意味着好朋友我的语言;) 这也适用于使用Material theme via AppCompat:只需在MyActionButtonOverflow 中切换到parent="Widget.AppCompat.ActionButton.Overflow" 无法使用 mipmap 而不是 drawable/ic_launcher.. 使用 api 15 appcompat 主题 刚试过,对我不起作用。没有错误,但图标保持不变。【参考方案8】:

1) 在你的班级中声明menu

private Menu menu;

2) 在onCreateOptionsMenu 中执行以下操作:

public boolean onCreateOptionsMenu(Menu menu) 
    this.menu = menu;
    getMenuInflater().inflate(R.menu.menu_orders_screen, menu);
    return true;
   

3) 在onOptionsItemSelected 中,获取项目并根据需要进行更改(图标、文本、颜色、背景)

public boolean onOptionsItemSelected(MenuItem item) 
    int id = item.getItemId();
    if (id == R.id.action_search) 
        return true;
    
    if (id == R.id.ventor_status) 
        return true;
    
    if (id == R.id.action_settings_online) 
        menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.history_converted));
        menu.getItem(1).setTitle("Online");
        return true;
    
    if (id == R.id.action_settings_offline) 
        menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.cross));
        menu.getItem(1).setTitle("Offline");
        return true;
    

    return super.onOptionsItemSelected(item);

注意: 如果您有 3 个菜单项: menu.getItem(0) = 1 个项目, menu.getItem(1) = 2 个项目, menu.getItem(2) = 3 个项目

在此基础上,根据您的要求进行相应的更改。

【讨论】:

他说的是菜单图标本身,而不是菜单项。【参考方案9】:

使用 Syed Raza Mehdi 的示例并添加 Application themename=actionOverflowButtonStyle 参数以实现兼容性。

<!-- 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/MyActionButtonOverflow</item>

    <!-- For compatibility -->
    <item name="actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>

</style>

【讨论】:

【参考方案10】:
//just edit menu.xml file    
//add icon for item which will change default setting icon
//add sub menus


 ///menu.xml file


    <item
            android:id="@+id/action_settings"
            android:orderInCategory="100"
            android:title="@string/action_settings"
            android:icon="@drawable/your_icon"
            app:showAsAction="always" >

            <menu>

                <item android:id="@+id/action_menu1"
                    android:icon="@android:drawable/ic_menu_preferences"
                    android:title="menu 1" />

                <item android:id="@+id/action_menu2"
                    android:icon="@android:drawable/ic_menu_help"
                    android:title="menu 2" />

            </menu>
        </item>

【讨论】:

谢谢!它有效:) 只是想提一下“action_settings”的项目应该包装在“schemas.android.com/apk/res/android" xmlns: app="schemas.android.com/apk/res-auto" > ... " @string/action_settings - 必须有默认的android资源,包括所有语言【参考方案11】:

我得到了一个更简单的解决方案,非常适合我:

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.change_pass);
        toolbar.setOverflowIcon(drawable);

【讨论】:

对我来说,它也可以正常工作并且以编程方式运行,我们可以随时更改它,这是额外的优势。谢谢帕特。 完美运行!谢谢。 这太完美了,正是我想要的。大多数人都讨论过永远更改整个应用的图标。 在使用val toolbar = findViewById&lt;Toolbar&gt;(R.id.action_bar)toolbar.overflowIcon = Util.getDrawable(R.drawable.ic_menu)&lt;style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"&gt;时不起作用【参考方案12】:

    在styles.xml中改变你自定义的Actionbar溢出图标

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

    将自定义主题“MyTheme”放在AndroidManifest.xml的应用标签中

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

玩得开心。@.@

【讨论】:

【参考方案13】:

你可以做到这一点

<item
    android:id="@+id/menus"
    android:actionProviderClass="@android:style/Widget.Holo.ActionButton.Overflow"
    android:icon="@drawable/your_icon"
    android:showAsAction="always">
  <item android:id="@+id/Bugreport"
   android:title="@string/option_bugreport" />

  <item android:id="@+id/Info"
  android:title="@string/option_info" />

 <item android:id="@+id/About"
   android:title="@string/option_about" />
  </item>

【讨论】:

称其为 hack 有点误导。这是 Android 系统的标准部分。 我不是说你错了,这是正确的答案。但这绝对不是 hack。

以上是关于如何更改操作栏中的选项菜单图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改菜单栏中的 Xamarin 后退按钮?

如何管理Mac电脑菜单栏中的图标

如何通过单击选项卡来更改操作栏菜单按钮

如何更改操作栏中下拉菜单的背景颜色

如何在左侧的操作栏上充气菜单

我在eclipse中配置了tomcat,菜单栏中有tomcat选项,工具栏中三个小猫的图标也有。