HY
我正在使用btwebview来获取文本选择并进行处理。问题是,当我将longPress与gestureDetector一起使用时,默认选择也会被启动,如果我重写onTouchEvent并返回true,问题就解决了,但是我无法单击Web视图上的任何按钮或突出显示的链接,因此无法访问脚注或视频插入到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");

}


任何建议,将不胜感激。

最佳答案

Web视图停止响应触摸的原因是因为该功能是在超类的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。

关于android - 删除默认选择而不禁用Web View 的超链接和按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27797426/

10-10 09:42