删除默认选择而不禁用 Web 视图的超链接和按钮
Posted
技术标签:
【中文标题】删除默认选择而不禁用 Web 视图的超链接和按钮【英文标题】:remove default selection without disabling web view's hyperlinks and buttons 【发布时间】:2015-03-04 01:08:00 【问题描述】:我正在使用 btwebview 来获取文本选择并进行处理。问题是当我将 longPress 与gestureDetector 一起使用时,默认选择也会启动,如果我覆盖onTouchEvent 并返回true,问题就解决了,但我无法单击webview 上的任何按钮或突出显示的链接,因此我无法访问脚注或视频插入 webview 并且 shouldOverrideUrlLoading 停止被调用。
public void init(Context context)
System.out.println("BTWebview init");
this.context = context;
this.getSettings().setjavascriptEnabled(true);
gestureScanner = new GestureDetector(this);
this.setOnTouchListener(new View.OnTouchListener()
public boolean onTouch(View v, MotionEvent event)
System.out.println("event "+event.toString() );
return gestureScanner.onTouchEvent(event);
);
setInitialScale(100);
addJavascriptInterface(new MyJavaScriptInterface(), "htmlOUT");
@Override
public boolean onTouchEvent(MotionEvent event)
System.out.print("on touch event "+ event.toString());
return true;
@Override
public void onLongPress(MotionEvent e)
// TODO Auto-generated method stub
// TODO Auto-generated method stub
System.out.println("gesture listener onLongPress");
mSelection = true;
if(!this.isInSelectionMode())
System.out.println("onLongClick in selection mode");
mSelection = true;
this.loadUrl("javascript:android.selection.longTouch();");
mScrolling = true;
System.out.println("onLongClick");
【问题讨论】:
【参考方案1】:webview 停止响应触摸的原因是该功能是在超类的onTouchEvent
中实现的。
因此,要让它再次工作,您需要在您的 onTouchEvent
中的某处致电 super.onTouchEvent(event)
。显然,总是调用它会让你回到你开始的地方。
要实现您想要做的事情,只有在您尚未检测到该事件是长按事件时,您才需要调用super.onTouchEvent
。最简单的方法是存储来自MotionEvent
的指针ID,该ID 在onLongPress
中传递(您应该能够假设它将是索引0 处的指针,因为长按定义为单次触摸事件)。
一旦你有了这个,你的 onTouchEvent 可能看起来像这样
@Override
public boolean onTouchEvent(MotionEvent event)
if (event.getPointerId(0) != self.lastLongPressPointerId)
return super.onTouchEvent(event);
return true;
您可能还需要注意与指针相关的 ACTION_UP 和 ACTION_CANCEL 事件,然后停止寻找它,以防系统决定重用指针 ID。
【讨论】:
很抱歉回复晚了,我已经尝试过您的建议,但没有奏效。当 onTouchEvent 被覆盖时的问题,就像您发布脚注链接和 webview 中的按钮停止工作的问题一样。我可以尝试的任何其他建议 你的逻辑是对的,但可能我犯了一些错误,我会再次修改,但谢谢你的想法。 event.getPointerId(0) 对于所有手势总是为零,我认为这是问题所在。还有其他方法可以检测到某个事件吗? 好的,我通过设置一个对动作进行倒计时的计数器找到了解决方案,如果它们大于 2,那么它是一个长按,我返回 true,否则返回 super.onTouchEvent(event)。以上是关于删除默认选择而不禁用 Web 视图的超链接和按钮的主要内容,如果未能解决你的问题,请参考以下文章
【急】【狗不答问题】点击网页中的超链接按钮没用是怎么回事? 赏金:200