我有一个带有应用程序栏和导航抽屉的活动。应用栏是使用来自appcompat-v7库版本21+的新工具栏类实现的,导航抽屉显示在其前面。
该活动包含一个列表视图,其中包含可以选择的项目,因此我展示了一个上下文操作栏(CAB)。通过调用以下命令开始:
ActionBarActivity.startSupportActionMode(android.support.v7.view.ActionMode.Callback callback)
默认情况下,CAB插入在工具栏上方,而不是覆盖它。默认情况下,CAB似乎只会覆盖真正的ActionBar。如此答案所示,设置此主题属性后,CAB会正确覆盖工具栏:
true
但是,这也会使CAB覆盖导航抽屉,根据材料设计规范,这是不正确的。 Android的主要设计文档仍然建议在打开导航抽屉时隐藏CAB,并在关闭时再次显示CAB,这可以"解决"问题,但这不是必需的。按照书面规定,材料设计规范未指定在导航抽屉打开时应隐藏CAB,并且由于导航抽屉应在CAB上方打开,因此隐藏CAB实际上是一种视觉干扰。
有什么方法可以将导航抽屉显示在CAB的前面,同时仍将其覆盖在工具栏上?
我可能已经找到了解决方案-或一个简单的解决方法。
当使用startActionMode()而不是内置的setChoiceMode()时,即使使用ListFragment,我也会遇到相同的问题。
因此,我查看了ListFragment代码,发现在活动上未调用startActionMode(),而是在其ListView上调用了startActionMode(),因此我尝试使用视图。
现在在我的代码中,使用片段ListView显然可以按预期工作:
ActionMode mActionMode = getListView().startActionMode(this);
或使用包含我的片段的Activity容器:
View aView = getActivity().findViewById(R.id.container);
ActionMode mActionMode = aView.startActionMode(this);
也:
现在,后退按钮会破坏动作模式,而之前没有
CAB现在可以正确覆盖操作栏,而在我的风格中使用windowActionModeOverlay只能覆盖其中的一部分-至少就我而言
CAB图标是后退箭头而不是对勾-不确定这是什么意思
老实说,我不确定造成这种情况的原因,因此不确定该解决方案的安全性,但是暂时看来效果不错。
如果有人有更好的理解,请随时发表评论或编辑。
我正在使用RecyclerView而不是ListView。 至少在这种情况下,这没有用。 CAB仍在我的抽屉里。