0

I would like to use onTouchEvent in WebView. However, nothing is displayed in log. It works if I change onTouchEvent to dispatchTouchEvent.

Why is onTouchEvent not called?

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;
}
olshevski
  • 4,971
  • 2
  • 35
  • 34
wakya
  • 11
  • 1
  • 6

4 Answers4

1

you are talking 'OnTouchEvent' of activity, not Webview.

So,Why OnTouchEvent not called? It is about Event delivery in activity. In short, the webview consume the event when you touch the window.

You can do a test:
1. put a Button and a Textview in activity. log in onTouchEvent().
2. touch the Button --> onTouchEvent() not be called. because Button consume the event, like your webview.
3. touch the Textview --> onTouchEvent() will be called. because Textview can not consume the event.

About 'Event delivery', you can get much with google. maybe this will help you to understand it.

Evan
  • 266
  • 4
  • 5
0

Use dispatchTouchEvent instead of touchEvent

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    //your code
    return super.dispatchTouchEvent(ev);
}
Ghulam Moinul Quadir
  • 1,638
  • 1
  • 12
  • 17
0

you haven't set myWebView.setOnTouchListener(this) for your webView.

Sneh Pandya
  • 8,197
  • 7
  • 35
  • 50
mithil1501
  • 506
  • 9
  • 20
0

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;
}
RonTLV
  • 2,376
  • 2
  • 24
  • 38