由于 Android 中存在两个拥有自己菜单的 Fragments
的 bug,我正在以编程方式构建我的 Actionbar
菜单项。
我在 MultiChoiceModeListener
的 onCreateActionMode
中构建菜单。如果菜单项超过 4 个,则所有菜单项都被强制放入上下文操作栏的溢出菜单中。
这种情况发生在纵向和横向模式下,但仅当布局处于非平板视图时(例如,两个片段都未显示)。我正在 Galaxy Nexus 上测试 Android 4.2。
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_ROOM
或 ALWAYS
似乎没有影响。
更新2
我有另一个使用 OnItemLongClickListener
而不是 MultiChoiceModeListener
的 Fragment
,并且我没有遇到相同的问题。我可以放置10个菜单项,并且它会在 Actionbar
中显示前几个,并将其余的放入溢出区,如预期。
更新3
在这个问题上,使用 Nexus 7 竖屏模式仍然存在问题。但是,在非平板电脑视图中(两个片段都未显示),在 Nexus 7 横屏模式下,菜单项会显示。我唯一能想到的是,在使用 MultiChoiceModeListener 时,可能存在某些间距计算,认为上下文操作栏没有足够的空间。