onLongClickListener在WebView上无效

5

我有以下结构来实现长按监听器。如果我点击包含HTML链接的Webview上的文本,它可以工作,因此我知道结构并不完全错误。

我现在已经删除了这个链接,但监听器就是不再监听点击事件。是否有人遇到过这个问题并有一些建议?

    private View.OnLongClickListener mLongClickHandler = new View.OnLongClickListener()   {
    @Override
    public boolean onLongClick(View view) {
        ...
        return true;
    }
};

...

mywebview.setOnLongClickListener(mLongClickHandler);

事件在到达实际 webview 之前可能被 webview 内容消耗了。 - Falmarri
WebView仅显示文本。在文本内部的HTML链接上进行长按即可使用。 - nob
我在HTC Desire(Android 2.2.2)上遇到了类似的问题:OnLongClickListenerniver除了在链接上被单击时,从未被触发。请注意,这个问题在Galaxy S2上从未发生过(适用于Android 2.3.3)。 - Gilbou
2个回答

3

我现在尝试自己克隆长按操作。这样做可以,但只有几次。一段时间后,onTouch事件不再被调用了... 有什么建议吗?

private Runnable copyTextAfterDelay=new Runnable() {
    public void run() {
        ...
    }
};

...

        myWebView.setOnTouchListener(new View.OnTouchListener() { 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) { 
                    case MotionEvent.ACTION_DOWN:  
                        mTimerHandler.removeCallbacks(copyTextAfterDelay);
                        mTimerHandler.postDelayed(copyTextAfterDelay,1000);
                        break;
                    case MotionEvent.ACTION_UP: 
                        mTimerHandler.removeCallbacks(copyTextAfterDelay);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        mTimerHandler.removeCallbacks(copyTextAfterDelay);
                        break;
                }
                return false;                  
            }
            });

3
重写你的Webview的 onTouch 方法,并对 ACTION_DOWN 事件返回 true。这样你就可以消耗掉你的按下事件。
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN:  
            return true;
      }
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接