setOnClickListener在Android WebView上没有响应

时间:2010-08-30 11:47:15

标签: android webview

我有Android LisView,它包含TextView以显示列表中的数据,

我添加将其更改为Webview,之后一切都看起来不错,除了不再响应的setOnClickListener ..

我已经阅读了Webview,发现不支持setOnClickListener,而是支持setOnTouchListener

在Android WebView中使用与setOnClickListener相同功能的方法吗?

像这样:

  myWebView.setOnClickListener(new OnClickListener(){ 
                          @Override 
                          public void onClick(View v) {

                          //do it ..

                          } 
                        }); 

谢谢(:

2 个答案:

答案 0 :(得分:4)

为什么不像你说的那样使用onTouch监听器?

myWebView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            return false;
        }
    });

答案 1 :(得分:4)

我最终得到了这个解决方案:

public class ClickableWebView extends WebView {

    private static final int MAX_CLICK_DURATION = 200;
    private long startClickTime;

    public ClickableWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ClickableWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ClickableWebView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                startClickTime = Calendar.getInstance().getTimeInMillis();
                break;
            }
            case MotionEvent.ACTION_UP: {
                long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                if(clickDuration < MAX_CLICK_DURATION) {
                    super.performClick();

                }
            }
        }
        return true;
    }

}

说明:

  • 将所有点击事件抑制到WebView内的任何内容(例如:超链接)
  • 只需在xml或Java
  • 中添加OnClickListener即可添加onClick
  • 没有插入滚动手势

感谢Stimsoni回答How to distinguish between move and click in onTouchEvent()?