移除默认选择,而不禁用Web视图的超链接和按钮。

问题描述 投票:1回答:1

我是用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");

}
android webview textselection
1个回答
1
投票

webview之所以对触摸停止响应,是因为该功能是在超类中实现的。onTouchEvent.

所以,要想让它重新工作,你需要调用 super.onTouchEvent(event) 在你 onTouchEvent. 很显然,只要一直打电话,就能让你回到起点。

为了实现你想做的事情,你需要调用的是 super.onTouchEvent 只有当你还没有检测到该事件是一个长按事件时,才会使用这个方法。最简单的方法是将指针ID从 "长按 "事件中存储起来。MotionEvent 传入 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。

© www.soinside.com 2019 - 2024. All rights reserved.