上下文操作栏与工具栏操作混淆

Posted

技术标签:

【中文标题】上下文操作栏与工具栏操作混淆【英文标题】:Contextual Action Bar messing with Toolbar actions 【发布时间】:2015-07-22 11:32:38 【问题描述】:

我正在使用 appcompat v7 和支持设计库。在我的活动中,有一个常规工具栏,其中包含三个操作按钮(RM1、RM2、RM3):

_____________________________________
                         RM1 RM2 RM3 |
_____________________________________|  

当长按列表中的某些项目时,会显示上下文操作栏 (CAB),而不是常规工具栏。我的 CAB 有一个单一操作 (CM)。

_____________________________________
                                  CM |
_____________________________________|  

当上下文操作栏 (CAB) 被激活时,它会隐藏常规工具栏。此时,如果我单击上下文菜单 (CM),一切正常。但是由于某种原因,如果我单击 CM 左侧的空白区域,则会显示常规菜单 RM1 和 RM2,尽管 CAB 隐藏了常规工具栏。当 CAB 处于活动状态时,RM1 和 RM2 图标显然不会显示,但点击处理程序仍然存在,即使常规工具栏被隐藏,它们也会被触发。 CAB 不会拦截点击,除非它在点击点有动作。如果我单击 CM,则处理正确:RM 未显示,因为该按钮正好位于 CM 菜单下方。

这是一个错误吗?有什么解决方法吗?

android 4.1 设备中测试。

【问题讨论】:

【参考方案1】:

我认为这是一个错误。我自己也遇到过,isolated it。这是一个解决方法,假设您正在扩展 AppCompatActivity:

@Override
public void onSupportActionModeStarted(ActionMode mode) 
    super.onSupportActionModeStarted(mode);
    rm1.setEnabled(false);
    rm2.setEnabled(false);
    rm3.setEnabled(false);


@Override
public void onSupportActionModeFinished(ActionMode mode) 
    super.onSupportActionModeFinished(mode);
    rm1.setEnabled(true);
    rm2.setEnabled(true);
    rm3.setEnabled(true);

【讨论】:

不幸的是,这是唯一对我有用的解决方案。

以上是关于上下文操作栏与工具栏操作混淆的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 QToolBar / QDockWidget 上下文菜单操作?

如何在 Android 中完全禁用上下文操作栏?

Visual Studio 设计器和工具箱混淆

with管理文件操作上下文

with管理文件操作上下文

with管理文件操作上下文