简体   繁体   English

未在网络视图上调用OnTouchEvent

[英]OnTouchEvent not called on webview

I would like to use onTouchEvent in WebView . 我想在WebView使用onTouchEvent However, nothing is displayed in log. 但是,日志中什么也不显示。 It works if I change onTouchEvent to dispatchTouchEvent . 如果我将onTouchEvent更改为dispatchTouchEvent

Why is onTouchEvent not called? 为什么不调用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;
}

Use dispatchTouchEvent instead of touchEvent 使用dispatchTouchEvent而不是touchEvent

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    //your code
    return super.dispatchTouchEvent(ev);
}

您尚未为webView设置myWebView.setOnTouchListener(this)

you are talking 'OnTouchEvent' of activity, not Webview. 您说的是活动的“ OnTouchEvent”,而不是Webview。

So,Why OnTouchEvent not called? 那么,为什么不调用OnTouchEvent? It is about Event delivery in activity. 它与活动中的事件传递有关。 In short, the webview consume the event when you touch the window. 简而言之,当您触摸窗口时,Web视图将使用该事件。

You can do a test: 您可以进行测试:
1. put a Button and a Textview in activity. 1.在活动中放置一个Button和一个Textview。 log in onTouchEvent(). 登录onTouchEvent()。
2. touch the Button --> onTouchEvent() not be called. 2.触摸Button-> onTouchEvent()不会被调用。 because Button consume the event, like your webview. 因为Button占用了该事件,例如您的Webview。
3. touch the Textview --> onTouchEvent() will be called. 3.触摸Textview-> onTouchEvent()将被调用。 because Textview can not consume the event. 因为Textview无法使用该事件。

About 'Event delivery', you can get much with google. 关于“活动交付”,您可以从Google获得更多收益。 maybe this will help you to understand it. 也许会帮助您理解它。

Add this: 添加:

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

Remove this: 删除此:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM