我的需求是用户长按WebView,实现蓝色背景和水滴选中效果,并且只弹出我自定义的菜单。
由于腾讯X5内核底层流程不是用actionmode实现的,所以自定义
startActionMode or startActionModeForChild
都是不会被执行的。所以要想实现自定义菜单,并且屏蔽掉内核自带的长按菜单还是很麻烦的。
- 根据官网尝试实现
IX5WebViewClientExtension
所有方法,并重写onShowLongClickPopupMenu
方法让他返回True,设置给X5WebView。这么写会直接把长按复制操作都给禁用了,长按直接没效果了,我自己的菜单也弹不出来了,所以这是不行的。
- 让前端屏蔽某个节点或整个页面的长按菜单,代码如下:
document.oncontextmenu=function(){
window.event.returnValue=false;
}
这么写长按的时候也会没效果。
最终实现方法
- 给X5设置
setSelectListener
方法,实现ISelectionInterface
接口方法,全部返回空即可。 - 给webview设置的IX5WebViewClientExtension中实现onShowLongClickPopupMenu方法让他返回True,设置方法有2个:
- 实现
IX5WebViewClientExtension
所有方法,并重写onShowLongClickPopupMenu
方法让他返回True,设置给X5WebView。 - 创建ProxyWebViewClientExtension对象并重写
onShowLongClickPopupMenu
方法让他返回True,不需要实现全部方法。官方推荐使用这一种
- 实现
- 调用
mX5WebView.getX5WebViewExtension().enterSelectionMode(boolean isSelectALL)
,根据情况是否全选,设置对应参数。这个方法需要写在onShowLongClickPopupMenu
方法里面,否则会报空指针异常。并且需要设置延迟调用,否则会出现你长按选中的一直是你上一次长按的地方
。