str*_*r4d 25 android contextual-action-bar navigation-drawer android-5.0-lollipop android-toolbar
我有一个应用栏和导航抽屉的活动.应用栏使用appcompat-v7库版本21. +中的新工具栏类实现,导航抽屉显示在其前面.
该活动包含一个列表视图,其中包含可以选择的项目,因此我显示了一个上下文操作栏(CAB).它是通过调用来启动的:
ActionBarActivity.startSupportActionMode(android.support.v7.view.ActionMode.Callback callback)
Run Code Online (Sandbox Code Playgroud)
默认情况下,CAB插入工具栏上方而不是覆盖它; 似乎CAB默认只覆盖真正的ActionBar.作为展现在这个答案中,CAB正确叠加时,这个主题属性设置工具栏:
<item name="windowActionModeOverlay">true</item>
Run Code Online (Sandbox Code Playgroud)
但这也使得CAB覆盖了导航抽屉,根据材料设计规格,这是不正确的.主要的Android设计文档仍然建议在打开导航抽屉时隐藏CAB并在关闭时再次显示它,这可以用来"修复"问题,但它不应该是必要的.如上所述,Material设计规范没有指定当导航抽屉打开时应该隐藏CAB,并且因为导航抽屉应该在CAB上打开,隐藏CAB实际上是一种视觉分心.
有没有办法在CAB前面显示导航抽屉,同时还能覆盖工具栏?
小智 2
我可能找到了一个解决方案 - 或者可能是一个简单的解决方法。
即使使用 ListFragment,当startActionMode()使用 ListFragment 而不是内置的setChoiceMode(). 所以我查看了 ListFragment 代码,发现它startActionMode()不是在活动上调用的,而是在其 ListView 上调用的,所以我尝试使用视图。现在,在我的代码中,它显然可以使用片段 ListView 按预期工作:
ActionMode mActionMode = getListView().startActionMode(this);
Run Code Online (Sandbox Code Playgroud)
或使用包含我的片段的活动容器:
View aView = getActivity().findViewById(R.id.container);
ActionMode mActionMode = aView.startActionMode(this);
Run Code Online (Sandbox Code Playgroud)
还:
windowActionModeOverlay我的风格使用时仅覆盖了它的一部分 - 至少在我的情况下老实说,我不确定这背后的原因,所以我不确定这个解决方案有多安全,但目前看来工作正常。
如果有人有更好的理解,请随时发表评论或编辑。
| 归档时间: |
|
| 查看次数: |
4362 次 |
| 最近记录: |