安卓选项菜单图标无法显示

17

我正在学习一本关于Android开发的书,以便开始编写我的第一个真正的应用程序。 我已经到了为其中一个活动创建选项菜单的步骤。菜单出现了,但是菜单项的相应图标却无法显示。 以下是菜单的代码:

ReminderListActivity

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.list_menu, menu);
        return true;
    }

res/menu/list_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/menu_insert"
        android:icon="@drawable/menu_add"
        android:title="@string/menu_insert" />

</menu>
我将ic_menu_add.png(32x32px)图标从我的Android SDK子文件夹复制到了res/drawable-mdpi文件夹,并将文件名改为menu_add.png。我在eclipse中刷新了文件夹,这样图标就会显示出来,而且我也在布局文件中将其设置为菜单项的图标。我尝试在模拟器中运行我的项目几次,但图标从未出现。值得一提的是,我正在使用Android 4.0.3版本。
有什么想法吗?

你能试着把图标放到无密度文件夹里吗?我认为这与你的代码无关。可能是Eclipse中的一个故障。 - iTurki
1
添加一个名为“drawable”的文件夹,然后将图标放在其中。如果不起作用,请尝试在每个文件夹中复制图标。在测试之前不要忘记刷新项目并清理它。 - iTurki
真的很奇怪!!标题被显示了,对吧? - iTurki
是的,只有标题而没有图标。我在StackOverflow上找到了一个类似的问题,有人只看到了图标而没有标题,这显然是因为图标太大了。因为我的图标是从标准可绘制资源(32x32像素)中获取的,所以我认为尺寸应该是合适的。 - Jort
1
你的图标颜色是否正确?我的意思是它是否会与背景混合?此外,“drawables”不是用于像图标这样的无密度文件夹,而是用于形状等。如果您有真正的密度无关的图标(即纯色等),它们应该放入“drawable-nodpi”文件夹中。 - Code Poet
显示剩余5条评论
3个回答

32
在Android 3.0及以上版本中,对于选项菜单(在操作栏中的溢出菜单),首选方法将不显示图标。如果你设置了android:targetSdkVersion="11"或更高版本,则图标在Android 3.0+的菜单中永远不会出现。如果你将选项菜单项提升为工具栏按钮,则图标将显示,并且在Android 1.x/2.x设备上也会显示图标。

谢谢回复,我怀疑这与Android的设置有关。我能否将我的选项菜单项简单地转换为工具栏按钮,还是需要将整个选项菜单转换为工具栏? - Jort
@Jort:首先,你不必担心图标的问题。你可以使用android:showAsAction将选项菜单项移动到操作栏中作为工具栏按钮。 - CommonsWare
感谢您的澄清。我现在正在遵循的书籍专注于编写Android 2.2应用程序,这就是为什么我一直试图让我的图标显示出来的原因。我还没有使用过操作栏,但现在我明白了新版本Android中UI如何改变。再次感谢您的有用建议 :) - Jort

8

这对我在API 23中完美地工作

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
    android:icon="@drawable/ic_menu"
    android:orderInCategory="100"
    android:title="Option Menu"
    app:showAsAction="always">
    <menu>
        <item
            android:id="@+id/action_myorder"
            android:icon="@drawable/ic_order"
            android:title="My Order" />
        <item
            android:id="@+id/action_myaccount"
            android:icon="@drawable/ic_account"
            android:title="My Account" />
        <item
            android:id="@+id/action_share"
            android:icon="@drawable/ic_share"
            android:title="Share" />
        <item
            android:id="@+id/action_term_condition"
            android:icon="@drawable/ic_terms"
            android:title="Term and Conditions" />
        <item
            android:id="@+id/action_logout"
            android:icon="@drawable/ic_logout"
            android:title="Logout" />
    </menu>
</item>


太好了!只是想知道 android:orderInCategory="100" 的用途是什么。 - Abhijit
如果类别的值为0,则溢出菜单会在片段上弹出,如果它小于片段,则会在片段下方弹出。 - Ness Tyagi
一个有用的视频,解释了如何添加选项菜单中的图标:http://youtube.com/watch?v=GNGzmf_UcvY 'android 如何在选项菜单中添加图标' - SJX

0
一个好的想法是使用RelativeLayout创建一个布局,当用户选择您的菜单时,显示您的布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接