在Android中没有显示的菜单图标

我想添加菜单处理程序到我的项目。 我也阅读http://developer.android.com/guide/topics/ui/menus.html ,它非常简单,但图标不显示。 我很困惑。 我甚至以编程方式添加了一个菜单项。

我的代码是:

@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 0, 0, "Quit").setIcon(R.drawable.ic_launcher); getMenuInflater().inflate(R.layout.menu, menu); return true; } 

并在xml中:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Single menu item Set id, icon and Title for each menu item --> <item android:id="@+id/menu_bookmark" android:icon="@drawable/update" android:title="@string/Update" /> </menu> 

如果您在Android 3.0+上运行代码,菜单中的图标不会按devise显示。 这是Google的devise决定。

您可以在Android开发者博客上阅读更多关于它的内容。

无论系统做出什么样的deviseselect,您都可以通过解决这个问题的答案来解决这个问题

下面的代码完整性。 testing工作在android.support.v7.app.ActionBarActivity

 @Override public boolean onMenuOpened(int featureId, Menu menu) { if(featureId == Window.FEATURE_ACTION_BAR && menu != null){ if(menu.getClass().getSimpleName().equals("MenuBuilder")){ try{ Method m = menu.getClass().getDeclaredMethod( "setOptionalIconsVisible", Boolean.TYPE); m.setAccessible(true); m.invoke(menu, true); } catch(NoSuchMethodException e){ Log.e(TAG, "onMenuOpened", e); } catch(Exception e){ throw new RuntimeException(e); } } } return super.onMenuOpened(featureId, menu); } 

老问题,但希望它会帮助别人。

使用下面的代码:

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

注意我用app:showAsAction而不是android:showAsAction

经过长时间的尝试,我发现下面的解决scheme,可能会帮助别人节省时间。 基本上,“lbarbosa”提供的解决scheme,我真诚地感谢他。

试过这个基于以前的答案,它工作正常,至less与更新版本的支持库(25.1):

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); if(menu instanceof MenuBuilder){ MenuBuilder m = (MenuBuilder) menu; m.setOptionalIconsVisible(true); } return true; } 

你可以在你的XML元素中添加属性android:showAsAction="always" 。 然后它会在你的操作栏中显示相关的菜单选项作为一个图标。

请注意,它将代替菜单中的文字。

为了进一步阅读, 在这里看android:showAsAction

忘记所有这些,做这一步。 添加app:showsAsAction="always"您的项目。 如果您使用android:showsAsAction="always"您将无法获得解决scheme。 尝试添加应用程序属性到您的项目。

 @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 0, 0, "androidDemo").setIcon(R.drawable.ic_launcher); getMenuInflater().inflate(R.layout.menu, menu); return true; } 

并在xml中:

  <item android:id="@+id/menuUpdate" android:icon="@drawable/update_icon" android:title="@string/Update" android:showAsAction="always"/>