Android WebView:如何防止文本选择ActionMode ActionBar?

8
我想在 webView 中保留文本选择,同时防止显示任何上下文菜单。既不是新的浮动菜单,也不是旧的操作栏,只有选择句柄和当然的选择行为。
通过在 startActionMode 中钩取 actionModeCallback,我可以在回调 onCreateActionMode 中清除菜单中的所有项。
这在 Android 6 上运行良好,因为空浮动菜单根本不会显示,而且 actionMode 文本选择行为也得到了保留。
但是,不幸的是,在 Android <6 上,这会留下一个空的操作栏,如何完全删除它?
有没有一种简洁的方法来实现这一点?我正在一个 ReactNative 应用程序中工作,但使用的是自定义扩展的 Webview,并且我还可以访问 MainActivity 代码。
1个回答

13

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

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

@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; }
    };
}

如果你喜欢Java,你可能想要更改dummyActionMode函数的公共签名和缩进,但我不想这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接