【问题标题】:Dismiss the Contextual Action Bar When Nav. Drawer is Toggled导航时关闭上下文操作栏。抽屉已切换
【发布时间】:2014-05-05 14:56:26
【问题描述】:

official page for the Navigation Drawer design pattern 声明:

有时用户会处于上下文操作栏的状态 (CAB) 代替应用的操作栏出现。这通常发生 当用户选择文本或选择多个项目后 按住手势。当 CAB 可见时,您仍然应该 允许用户使用边缘滑动打开导航抽屉。 但是,在导航抽屉打开时,将 CAB 替换为标准操作栏。当用户关闭抽屉时, 重新显示 CAB。

但经过研究,我似乎无法找到一种方法来“关闭”我的

中的上下文操作栏
@Override
public void onDrawerOpened(View drawerView) {
    // ... My Code ...
}

方法。

在我的情况下,当用户从 EditText 中选择文本时,可能会出现 CAB(带有复制、粘贴等选项),而 Activity 本身会显示导航。抽屉。

我见过this question+answer,但它并不能完全解决我的问题,因为它与自定义动作模式有关。每当切换导航抽屉时,我如何“关闭”CAB - 当用户选择文本时显示的那个?

【问题讨论】:

    标签: java android navigation android-actionbar


    【解决方案1】:

    这是可能的。您必须在创建时获取对 ActionMode 的引用,以及 Activity 中的 ActionMode.Callback

    @Override
    public void onActionModeStarted(ActionMode mode) {
        super.onActionModeStarted(mode);
        mActionMode = mode;
    }
    
    @Override
    public void onActionModeFinished(ActionMode mode) {
        super.onActionModeFinished(mode);
        mActionMode = null;
    }
    
    @Override
    public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {
        mActionModeCallback = callback;
        return super.onWindowStartingActionMode(callback);
    }
    

    然后当您的抽屉打开/关闭时,完成ActionMode 或从ActionMode.Callback 开始一个新的ActionMode

    @Override
    public void onDrawerOpened(View drawerView) {
        if (mActionMode != null) {
            mActionMode.finish();
        }
    }
    
    @Override
    public void onDrawerClosed(View drawerView) {
        if (mActionModeCallback != null) {
            startActionMode(mActionModeCallback);
        }
    }
    

    【讨论】:

    • 不知道这些回调的存在。谢谢!您的回答非常有道理,但我只能稍后进行测试。我会尽快接受或提供更多详细信息。
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多