【问题标题】: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" />

【问题讨论】:

    标签: android android-actionbar android-menu android-optionsmenu android-icons


    【解决方案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】:

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

          一步一步

          1. 在类中声明菜单

          private var mMenu:菜单? = 空

          1. 重写 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
            

            }

          2. 在执行 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】:
              1. 在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>
                
              2. 将自定义主题“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。
                猜你喜欢
                • 2014-01-20
                • 2012-06-14
                • 1970-01-01
                • 1970-01-01
                • 2012-04-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多