如何更改操作栏中的选项菜单图标?
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<Toolbar>(R.id.action_bar)
、toolbar.overflowIcon = Util.getDrawable(R.drawable.ic_menu)
、<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
时不起作用【参考方案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 theme
和 name=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”的项目应该包装在“"@string/action_settings
- 必须有默认的android资源,包括所有语言【参考方案11】:
我得到了一个更简单的解决方案,非常适合我:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.change_pass);
toolbar.setOverflowIcon(drawable);
【讨论】:
对我来说,它也可以正常工作并且以编程方式运行,我们可以随时更改它,这是额外的优势。谢谢帕特。 完美运行!谢谢。 这太完美了,正是我想要的。大多数人都讨论过永远更改整个应用的图标。 在使用val toolbar = findViewById<Toolbar>(R.id.action_bar)
、toolbar.overflowIcon = Util.getDrawable(R.drawable.ic_menu)
、<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
时不起作用【参考方案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。以上是关于如何更改操作栏中的选项菜单图标?的主要内容,如果未能解决你的问题,请参考以下文章