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

时间:2013-11-03 07:06:19

标签: 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>

11 个答案:

答案 0 :(得分:32)

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

您可以在Android开发人员博客的this上阅读更多相关信息。

答案 1 :(得分:28)

无论系统选择何种设计,您都可以使用the top upvoted answer to this question

中提供的解决方案来解决这个问题。

以下代码的完整性。在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);
}

答案 2 :(得分:26)

经过长时间的尝试,我发现下面的解决方案可能有助于其他人节省时间。基本上,&#34; lbarbosa&#34;提供的解决方案,我真诚地感谢他。

根据以前的答案尝试了这个并且它运行正常,至少在支持库(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;
}

答案 3 :(得分:19)

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

使用以下代码:

<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

答案 4 :(得分:6)

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

请注意,它将是菜单中文本的

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

答案 5 :(得分:3)

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

答案 6 :(得分:2)

/* menu code */   
    <?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/one" android:title="one"
            android:icon="@mipmap/ic_launcher" app:showAsAction="always" />
        <item android:id="@+id/two" android:title="two"
            android:icon="@mipmap/ic_launcher" app:showAsAction="always" />
        <item android:id="@+id/three" android:title="three"
            android:icon="@mipmap/ic_launcher"  />
    </menu>
   /* Java code */

    @SuppressLint("RestrictedApi")
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.mymenu,menu);
            if(menu instanceof MenuBuilder){
                MenuBuilder m = (MenuBuilder) menu;
                m.setOptionalIconsVisible(true);
            }
            return true;
        }

答案 7 :(得分:1)

我使用以下代码将明确的图标放在onCreateOptionsMenu方法中

for(int i = 0; i

        if (item.getItemId() == R.id.print) {
            item.setIcon(getDrawable(R.drawable.print));

} }

答案 8 :(得分:0)

使用android.support.v7.app.AppCompatActivity使图标的输入变得非常困难。您需要实现onMenuOpen类的AppComactActivity超级方法。检查之后,菜单是否不为空。如果菜单不是null,则将像这样的Method类和setOptionalIconsVisible传递给带有布尔值的true。

@Override
public boolean onMenuOpened(int featureId, Menu menu) {

    if(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("MAIN", "onMenuOpened", e);
            }
            catch(Exception e){
                throw new RuntimeException(e);
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

答案 9 :(得分:0)

只需在menu.xml的item标记内添加此attr

app:showAsAction="always

答案 10 :(得分:-2)

@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"/>