删除CAB但保留webview文本选择

时间:2016-03-28 21:07:53

标签: android webview

我想实现自己的自定义视图(不夸大菜单项),我打算每次contextMenu启动时都使用工具栏,并在完成后隐藏它。

问题是:只有答案显示如何通过默认的actionMode菜单清除/充气另一个菜单

到目前为止我尝试了什么:

- > Use a custom contextual action bar for WebView text selection

覆盖WebView的回调

  @Override
    public ActionMode startActionMode(ActionMode.Callback callback) {
        callback2 = new customCallBack();
        return super.startActionMode(callback2);
    }



 public class customCallBack implements ActionMode.Callback {

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }
    }

将return false更改为true,不会产生所需的行为,即隐藏cab

覆盖OnLongClick也不是一个选项,因为它会禁用当前选择。

2 个答案:

答案 0 :(得分:2)

这个答案解决了这个问题: android webview: prevent text selection actionMode actionBar

不是最优雅的解决方案,但我只是在我建造的应用程序中测试它,它就像一个魅力。

答案 1 :(得分:1)

对我有用的唯一方法(仅在Android L +上)清除活动中上下文操作栏中的所有菜单项

 @Override
public void onActionModeStarted(ActionMode mode) {
    if (mActionMode == null) {
        mActionMode = mode;
        Menu menu = mode.getMenu();
        // Remove the default menu items (select all, copy, paste, search)
        menu.clear();
    }
    Toast.makeText(this, "onActionModeStarted", Toast.LENGTH_SHORT).show();
    super.onActionModeStarted(mode);

}

 @Override
    public void onActionModeFinished(ActionMode mode) {
        mActionMode = null;
        Toast.makeText(this, "onActionModeFinished", Toast.LENGTH_SHORT).show();
        super.onActionModeFinished(mode);
    }

受到Use a custom contextual action bar for WebView text selection

的启发

此外,我无法使用popupWindow或对话框或对话框片段实现自定义菜单。

所以简单地将它与webView放在一个框架布局中,然后播放它的可见性和边距