android webview:防止文本选择actionMode actionBar

Posted

技术标签:

【中文标题】android webview:防止文本选择actionMode actionBar【英文标题】:android webview: prevent text selection actionMode actionBar 【发布时间】:2016-07-05 10:11:39 【问题描述】:

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

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

这在 android 6 上运行良好,因为根本不会显示一个空的浮动菜单,并且会保留 actionMode 文本选择行为。

不幸的是,在 android

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

【问题讨论】:

【参考方案1】:

确实非常简单:在 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; 
    ;

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

【讨论】:

以上是关于android webview:防止文本选择actionMode actionBar的主要内容,如果未能解决你的问题,请参考以下文章

在 Android WebView 中选择并突出显示文本

如何从 webview 隐藏文本选择句柄:android

android webview 如何实现选择文本功能

在失焦时隐藏文本选择句柄:Android -Webview

Android 3.x 仅 WebView 文本选择 + JavaScript

在Android的WebView中修改选择时文本选择菜单消失