24

環境

ActionbarSherlock を使用して、いくつかのアクション アイテムを含むアクション バーを作成しています。それらのいくつかはオーバーフローしているため、オーバーフロー サブメニューに表示されます。

私の問題

これらのオーバーフローした項目は、単なるテキストとしてサブメニューに表示されます。

MenuItem.SHOW_AS_ACTION_IF_ROOM私はand MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXTforを試しましsetShowAsAction()たが、どちらも同じ動作をします:

アイコンなしのオーバーフローアイテム

私が欲しいもの

これらの項目をオーバーフロー サブメニューに<their_icon>+として表示することはでき<their_text>ますか? このようなもの:

アイコン付きのオーバーフローアイテム

4

4 に答える 4

15

サブメニューにアイコンとメニューのみのテキストを含めることができる理由もわかりません。メニュー項目をサブメニューとしてルートメニューに追加すると役立つ場合があります。:)

このようなアイコンを追加すると、古いバージョンの Android でメニュー キーを押したときに下部にメニューを表示する標準的な方法ではなく、ActionBar (Sherlock) の使用が強制されます。

<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 に答える