android webview:阻止文本选择actionMode actionBar

pao*_*iti 6 textselection android-webview android-actionbar android-actionmode react-native

我想在webView中保留文本选择,同时防止显示actioMode的任何上下文菜单.既不是新浮动的也不是旧的actionBar,只是选择句柄,当然还有选择行为.

挂钩startActionMode中的actionModeCallback允许我清除回调onCreateActionMode中菜单中的所有项目.

这在android 6上工作正常,因为根本不显示空的浮动菜单,并且保留了actionMode文本选择行为.

不幸的是,在android <6这会留下一个空的actionBar,如何完全删除它?

有没有一个干净的方法来获得这个?我正在使用ReactNative应用程序,但使用自定义扩展webview,我也可以访问mainActivity代码.

pao*_*iti 10

实际上它非常简单:在startActionMode中返回一个新的空ActionMode而不是返回null,null被解释为取消操作模式以及调用它的内容.

您需要覆盖startActionMode的旧的和新的api 23签名:

@Override
public ActionMode startActionMode(ActionMode.Callback callback, int type) {
    return this.dummyActionMode();
}

@Override
public ActionMode startActionMode(ActionMode.Callback callback) {
    return this.dummyActionMode();
}

public ActionMode dummyActionMode() {
    return new ActionMode() {
        @Override public void setTitle(CharSequence title) {}
        @Override public void setTitle(int resId) {}
        @Override public void setSubtitle(CharSequence subtitle) {}
        @Override public void setSubtitle(int resId) {}
        @Override public void setCustomView(View view) {}
        @Override public void invalidate() {}
        @Override public void finish() {}
        @Override public Menu getMenu() { return null; }
        @Override public CharSequence getTitle() { return null; }
        @Override public CharSequence getSubtitle() { return null; }
        @Override public View getCustomView() { return null; }
        @Override public MenuInflater getMenuInflater() { return null; }
    };
}
Run Code Online (Sandbox Code Playgroud)

如果你喜欢java,你可能想要更改dummyActionMode函数的公共签名和缩进,我没有.