HY 我正在使用btwebview来获取文本并进行处理。问题是当我使用带有gestureDetector的longPress时,默认选择也正在启动,如果我覆盖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");
}
任何建议都将不胜感激。
答案 0 :(得分:1)
webview停止响应触摸的原因是因为该功能是在超类中实现的。 onTouchEvent
。
为了让它再次发挥作用,您需要在super.onTouchEvent(event)
的某个地方拨打onTouchEvent
。显然,只要一直打电话就会让你回到你开始的地方。
要实现您想要的目标,只有当您还没有检测到该事件是长按事件时,您才需要致电super.onTouchEvent
。执行此操作的最简单方法是存储MotionEvent
中传递的onLongPress
中的指针ID(您应该可以假设它将是索引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。