菜单中的图标未显示在android中

Sha*_*tan 35 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;
}
Run Code Online (Sandbox Code Playgroud)

并在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>
Run Code Online (Sandbox Code Playgroud)

Szy*_*mon 34

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

你可以阅读更多关于它在这个关于Android开发者博客.


小智 30

经过长时间的尝试,我发现下面的解决方案可能会帮助其他人节省时间.基本上,"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;
}
Run Code Online (Sandbox Code Playgroud)

  • 唯一真正有效的解决方案,但您需要添加`@SuppressLint("RestrictedApi")` (3认同)
  • 说实话,伙计们,这是唯一真正有效的解决方案。是的,不要忘记将 @SuppressLint("RestrictedApi") 放在方法 public boolean onCreateOptionsMenu(Menu menu) 上 (2认同)

leR*_*bot 28

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

以下代码为完整性.经过测试的工作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);
}
Run Code Online (Sandbox Code Playgroud)

  • 由于我的featureId是108而不是8,我可以替换`featureId == Window.FEATURE_ACTION_BAR` - >`(featureId&Window.FEATURE_ACTION_BAR)== Window.FEATURE_ACTION_BAR` (3认同)

小智 18

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

使用以下代码:

<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>
Run Code Online (Sandbox Code Playgroud)

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


lim*_*lim 6

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

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

为进一步读,看这里的android:showAsAction.


归档时间:

查看次数:

73689 次

最近记录:

6 年,2 月 前