【问题标题】:OnTouchEvent not called on webviewOnTouchEvent 未在 webview 上调用
【发布时间】:2017-10-25 12:32:02
【问题描述】:

我想在WebView 中使用onTouchEvent。但是,日志中不显示任何内容。如果我将onTouchEvent 更改为dispatchTouchEvent,它会起作用。

为什么没有调用onTouchEvent

public WebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    myWebView = (WebView)findViewById(R.id.webView01);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.loadUrl("http://www.google.co.jp");
    //javascript
    myWebView.getSettings().setJavaScriptEnabled(true);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    Log.d("TouchEvent","call");
    return true;
}

【问题讨论】:

    标签: android android-studio webview


    【解决方案1】:

    您说的是活动的“OnTouchEvent”,而不是 Webview。

    那么,为什么不调用 OnTouchEvent 呢?它是关于活动中的事件传递。简而言之,当您触摸窗口时,webview 会消耗该事件。

    你可以做一个测试:
    1.在activity中放一个Button和一个Textview。登录 onTouchEvent()。
    2. touch Button --> onTouchEvent() 不被调用。因为 Button 会消耗事件,例如您的 webview。
    3. 触摸 Textview --> onTouchEvent() 将被调用。因为 Textview 不能消费该事件。

    关于“事件交付”,您可以通过 google 获得很多信息。 也许this 会帮助你理解它。

    【讨论】:

      【解决方案2】:

      使用dispatchTouchEvent 而不是touchEvent

      @Override
      public boolean dispatchTouchEvent(MotionEvent ev) {
      
          //your code
          return super.dispatchTouchEvent(ev);
      }
      

      【讨论】:

        【解决方案3】:

        你还没有为你的webView设置myWebView.setOnTouchListener(this)

        【讨论】:

          【解决方案4】:

          添加这个:

          myWebView.setOnTouchListener(new OnTouchListener(){
             public boolean onTouch(View arg0, MotionEvent event){
                  int x = (int) event.getX();
                  int y = (int) event.getY();
                  return true;
             } 
          )
          

          删除这个:

          @Override
          public boolean onTouchEvent(MotionEvent ev) {
              Log.d("TouchEvent","call");
              return true;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-05
            • 2012-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多