【问题标题】:setOnClickListener not response on Android WebViewsetOnClickListener 在 Android WebView 上没有响应
【发布时间】:2010-08-30 11:47:14
【问题描述】:

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

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

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

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

像这样:

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

                          //do it ..

                          } 
                        }); 

谢谢(:

【问题讨论】:

    标签: android webview


    【解决方案1】:

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

    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 中添加 onClick 即可添加 OnClickListener
    • 不中断滚动手势

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

    【讨论】:

      【解决方案2】:

      为什么不使用你所说的 onTouch 监听器?

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

      【讨论】:

      • 感谢康斯坦丁,也许我错过了 onTouch 事件的某些内容,我尝试了它,但它并没有按照我需要的方式工作。我有可以滚动的列表,列表中的每个项目在使用 onTouch 事件时打开网页同时向下滚动 listView 触发 onTouch 事件,我无法向下滚动,向下滚动列表触发 onTouch 事件,我想能够滚动到列表底部,然后单击。
      • 您必须调查 MotionEvent,根据您应该能够确定用户是否真的尝试滚动或只是触摸屏幕的信息。如果那是滚动条,只需返回 true 让 webview 照常运行。
      • 感谢 Konstantin,它看起来像 MotionEvent.ACTION_UP 为 webview 工作。列表视图中的每个项目都包含两个 webview 和两个 textview,当对单个 webview 使用 onTouchEvent 时效果很好,但是这样我需要为每个项目添加 onTouchEvent,所以我尝试使用 onTouchEvent 到 myView.setOnTouchListener像这样我只能为每一行调用一次,但这样做我没有得到任何回应。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2012-11-08
      • 2015-08-09
      • 1970-01-01
      相关资源
      最近更新 更多