24

语境

我正在使用 ActionbarSherlock 创建一个带有一些操作项的操作栏。其中一些是溢出的,因此它们显示在溢出子菜单中。

我的问题

那些溢出的项目仅作为文本显示在子菜单中。

我已经尝试过,MenuItem.SHOW_AS_ACTION_IF_ROOM但两者都有相同的行为:MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXTsetShowAsAction()

没有图标的溢出项目

我想要的是

是否可以在溢出子菜单中将这些项目显示为<their_icon>+ <their_text>?像这样的东西:

带有图标的溢出项目

4

4 回答 4

15

我也不明白为什么子菜单可以有图标和菜单只有文本。也许将菜单项作为子菜单添加到菜单可以帮助您。:)

提一下,添加这样的图标将迫使您使用 ActionBar (Sherlock),而不是在旧版本的 Android 中按下菜单键时在底部显示菜单的标准方式。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/root_menu"
    android:icon="@drawable/ic_menu_moreoverflow_normal_holo_light"
    android:showAsAction="always"
    android:title="More">
    <menu>
        <item
            android:id="@+id/menu_settings"
            android:icon="@drawable/ic_menu_settings_holo_light"
            android:showAsAction="never"
            android:title="Settings" />
        <item
            android:id="@+id/menu_about"
            android:icon="@drawable/ic_menu_info_details"
            android:showAsAction="never"
            android:title="About"/>
   </menu>
</item>
</menu>
于 2012-09-23T19:01:25.537 回答
6

1、将com.actionbarsherlock.internal.view.menu.MenuBuilder.java中“mOptionalIconsVisible”的值改为true。然后你会一直看到这些图标。仅适用于 ActionBarSherlockCompact.java。

2、修改源代码为MenuBuilder.java和MenuWrapper.java添加一个api来设置图标。

于 2012-06-08T19:12:21.350 回答
5

我有一个解决这种情况的方法。如果您确定要放入溢出菜单中的内容,则可以将它们放入子菜单中,并且可以通过覆盖onCreateOptionsMenu方法将该子菜单项的图标和标题与子菜单一起放置。

这是我为实现此功能所做的工作:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, 1, 1, "MENU ONE TITLE")
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    SubMenu subMenu = menu.addSubMenu(0, 0, 2, "MENU TWO TITLE");

    subMenu.add(0, 2, 2, "SUB MENU ONE TITLE")
    .setIcon(R.drawable.sub_menu_one_icon);

    subMenu.add(0, 3, 3, "SUB MENU TWO TITLE")
    .setIcon(R.drawable.sub_menu_two_icon);

    MenuItem subMenuItem = subMenu.getItem();
    subMenuItem.setIcon(R.drawable.menu_two_icon);
    subMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return super.onCreateOptionsMenu(menu);
}
于 2012-10-27T08:58:48.710 回答
0

实际上,即使对于为溢出菜单创建的弹出菜单,也有一种方法可以在文本中添加图标。例如:

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);

这将在菜单项的开头放置一个图标,就在其原始文本之前。

于 2014-05-24T13:07:24.150 回答