由于 bug in Android,我正在以编程方式构建我的 Actionbar
的菜单项当有两个 Fragments
每个都有自己的菜单时。
我正在 MultiChoiceModeListener
的 onCreateActionMode
中构建菜单。如果有超过 4 个菜单项,则所有项目都将强制进入上下文操作栏的溢出菜单。
这发生在纵向和横向模式中,但仅当布局处于非平板电脑 View 时(例如,两个 fragment 均未显示)。我正在使用 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_ROOM
或 ALWAYS
似乎没有效果。
更新 2
我有另一个使用 OnItemLongClickListener
而不是 MultiChoiceModeListener
的 Fragment
,我没有遇到同样的问题。我可以放入 10 个菜单项,它将在 Actionbar
中显示第一对菜单项,并按预期将其余菜单项放入溢出。
更新 3
关于此问题的更多信息,对于纵向模式下的 Nexus 7,问题仍然存在,但是,在非平板电脑 View 中(两个 fragment 都不显示),在横向模式下Nexus 7,菜单项显示。我唯一能想到的是,在使用 MultiChoiceModeListener
时会进行一些间距计算,它认为上下文操作栏中没有空间,而实际上有。
最佳答案
Menu.add()方法都返回 MenuItem秒。对于添加的每个 MenuItem,只需调用 MenuItem.setShowAsAction(int)像这样:
MenuItem menuItem = menu.add(1, 0, 0, "Menu Item 1");
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
关于android - 上下文操作栏强制溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480508/