4

我正在以Actionbar编程方式构建我的菜单项,这是由于Android 中的一个错误,其中两个Fragments都有自己的菜单。

我正在构建菜单onCreateActionModeMultiChoiceModeListener如果菜单项超过 4 个,则所有项目都被强制进入上下文操作栏的溢出菜单。

这发生在纵向和横向模式下,但仅当布局在非平板电脑视图中时(例如,两个片段都未显示)。我正在使用 Android 4.2 在 Galaxy Nexus 上进行测试

    mListView = getListView();
    mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

    mListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
        @Override
        public boolean onCreateActionMode(android.view.ActionMode mode, android.view.Menu menu) {
            // Inflate the menu for the CAB
            menu.add(1, 0, 0, "Menu Item 1");
            menu.add(1, 1, 1, "Menu Item 2");
            menu.add(1, 2, 2, "Menu Item 3");
            menu.add(1, 3, 3, "Menu Item 4");
            menu.add(1, 4, 4, "Menu Item 5");
            return true;
        }
    }

更新

我已经将这个问题缩小到如果有超过 4 个菜单项,所有项目都会强制溢出。文本标签的长度无关紧要。我什至将所有文本都设置为空字符串,但它们仍然被迫溢出。设置IF_ROOMorALWAYS似乎没有效果。

更新 2

我有另一个Fragment使用 a OnItemLongClickListener,而不是 a MultiChoiceModeListener,并且我没有遇到同样的问题。我可以放入 10 个菜单项,它会Actionbar按预期显示第一对,并将其余的放入溢出中。

更新 3

关于这个问题的更多信息,对于纵向模式的 Nexus 7,问题仍然存在,但是,在非平板电脑视图中(两个片段均未显示),在 Nexus 7 的横向模式下,菜单项显示。我唯一能想到的是,当使用一个MultiChoiceModeListener认为上下文操作栏中没有空间的情况下,会进行一些间距计算。

4

1 回答 1

1

Menu.add ()方法都返回MenuItem。对于添加的每个 MenuItem,只需像这样调用MenuItem.setShowAsAction(int)

MenuItem menuItem = menu.add(1, 0, 0, "Menu Item 1");
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
于 2012-11-20T19:38:48.933 回答