Webview中无法触发手势方法(ontouchevent,onfling...)的解决方法

Android 开发-Android开发论坛推荐:http://www.eoeandroid.com/

悲催的写代码的路上总是遇到各种各样的问题,这不又碰到了一个头疼的问题!关于Webview中无法触发手势方法的解决方法,我在一个页面里放入了一个webview组件,并将其组件铺满屏幕,全屏幕除了下面的导航栏其余都是这个webview,后来我想在webview中触发滑动手势的onfling方法,在webview还没加载完网页内容之前正常,可是webview加载完网页之后,就无法触发方法了,经过上网已大艘,终于找到了解决方法,!如下

一般我们用于接收GestureDetector对象的方法是OnTouchevent();,而在View组件占用了屏幕空间之后,这个方法就无效了,只有换成 dispatchTouchEvent方法才有效!
不多说,上代码啦!!!

package com.example.rss_test;

import com.example.rss_test.util.MyGestureListener;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

@SuppressLint(“SetJavaScriptEnabled”)
public class NewsContent extends Activity{

     WebView webview;
      GestureDetector detector; 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
             requestWindowFeature(Window.FEATURE_NO_TITLE);

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()

     .detectDiskReads()       
     .detectDiskWrites()       
     .detectNetwork()   // or .detectAll() for all detectable problems       
     .penaltyLog()       
     .build());       

StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()

     .detectLeakedSqlLiteObjects()    
     .penaltyLog()       
     .penaltyDeath()       
     .build());  
             super.onCreate(savedInstanceState);
             setContentView(R.layout.news_content);
             webview=(WebView)findViewById(R.id.newscontent_webview);
             webview.getSettings().setJavaScriptEnabled(true);//设置支持JS
             webview.getSettings().setSupportZoom(true);//实现缩放
            detector = new GestureDetector(this, new MyGestureListener(this));
     webview.setWebViewClient(new WebViewClient(){       
        public boolean shouldOverrideUrlLoading(WebView view, String url) {       
           view.loadUrl(url);       
             return true;       
         }       

});

             webview.loadUrl("http://www.163.com");
     }
        /**
  * 把触摸事件交给手势识别对象 
 */


     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {    //注意这里不能用ONTOUCHEVENT方法,不然无效的
            Toast.makeText(NewsContent.this, "jinru", 1).show();
             detector.onTouchEvent(ev);
             webview.onTouchEvent(ev);//这几行代码也要执行,将webview载入MotionEvent对象一下,况且用载入把,不知道用什么表述合适
            return super.dispatchTouchEvent(ev);
     }

}

最终效果图:看!TOAST被执行了!

eoeAndroid开发论坛

Android 开发 http://www.eoeandroid.com/

你可能感兴趣的:(webView,webview组件,触发手势方法)