菜单中的图标未显示在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中:

      

Related of "菜单中的图标未显示在android中"

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

您可以在Android开发者博客上阅读更多相关信息。

无论系统做出何种设计选择,您都可以通过对此问题的最佳评价回答中提供的解决方案来规避这一点。

以下代码为完整性。 测试工作在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); } 

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

使用以下代码:

   

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

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

根据以前的答案尝试了这个,它工作正常,至少在最新版本的支持库(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; } 

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

请注意,它将取代菜单中的文本。

如需进一步阅读,请在android:showAsAction查看

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

 @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中: