7

您好
我正在使用 Honeycomb android 3.0 开发一个 android 应用程序。我正在尝试在 Action Bar 中显示菜单。菜单有一个图标和倾斜。当我们单击菜单项时,它以下拉列表的形式显示其项目。它是下拉列表中的项目,带有项目名称,但没有显示图标。我希望在单击菜单时出现的下拉列表中的标题旁边显示一个图标。谁能帮我解决这个问题。我的xml文件如下:

 <?xml version="1.0" encoding="utf-8"?>           
<menu  xmlns:android="http://schemas.android.com/apk/res/android">  
<item          
  android:id="@+id/addserver"  
  android:icon="@android:drawable/ic_menu_add"   
  android:title="Add Server"    
  android:showAsAction="ifRoom|withText"     
>  

<menu>    
            <item android:id="@+id/fileserver"    
                  android:icon="@android:drawable/ic_menu_add"  
                  android:title="File Server"          
                  android:onClick="onCreate"           
                  android:showAsAction="always"/>      
            <item android:id="@+id/sharepoint"            
                  android:icon="@android:drawable/ic_menu_add"  
                  android:title="Share Point"          
                  android:onClick="onCreate" />          
        </menu>            
</item>

最初它在左侧显示带有图标的添加服务器。点击它会显示文件服务器,共享点作为没有图标的下拉列表,尽管我给出了 android:icon 语句。
谁能帮我解决这个问题?
提前致谢,

4

3 回答 3

10

图标未显示在操作栏的溢出菜单中的行为是设计使然(截至撰写本文时)。如果您绝对需要使用图标,则需要编写自定义实现,考虑重新考虑您的设计以适应 UI 约定。

于 2011-03-07T06:39:59.193 回答
2

Actually, there is a way to put icons next to the texts for the menu items:

final MenuItem menuItem=...
final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon);
final CharSequence title=" "+menuItem.getTitle();
final SpannableString spannableString=new SpannableString(title);
spannableString.setSpan(imageSpan,0,1,0);
menuItem.setTitle(spannableString);

This will put an icon at the beginning of the menu item, right before its original text.

BTW, this will also work on PopupMenu.

于 2014-05-24T13:04:26.540 回答
1

虽然最初的问题有点老了,而且因为反对在菜单中显示图标的理由有些缺乏实质(参见 Steven Elliott 的优秀评论Displaying icon for menu items of Action Bar in Honeycomb android 3.0),我想指出这里给出了一个很棒的可行的解决方案:

@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) { //...
            } catch(Exception e) { // ...
            }
        }
    }
    return super.onMenuOpened(featureId, menu);
}

只需将此代码添加到您的活动并导入适当的模块。再一次,不是我的工作,但工作仍然如此。

于 2014-09-16T10:38:58.237 回答