Android Webview使用

来源:互联网 发布:淘宝直播镜像怎么安装 编辑:程序博客网 时间:2024/06/15 14:06

现在很多App里都内置了Web网页,比如说很多电商平台,淘宝等等…那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的。

webview状态

//激活WebView为活跃状态,能正常执行网页的响应webView.onResume() ;//当页面被失去焦点被切换到后台不可见状态,需要执行onPause//通过onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。webView.onPause();//当应用程序(存在webview)被切换到后台时,这个方法不仅仅针对当前的webview而是全局的全应用程序的webview//它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗。webView.pauseTimers()//恢复pauseTimers状态webView.resumeTimers();//销毁Webview//在关闭了Activity时,如果Webview的音乐或视频,还在播放。就必须销毁Webview//但是注意:webview调用destory时,webview仍绑定在Activity上//这是由于自定义webview构建时传入了该Activity的context对象//因此需要先从父容器中移除webview,然后再销毁webview:rootLayout.removeView(webView); webView.destroy();

关于前进 / 后退网页

//是否可以后退Webview.canGoBack() //后退网页Webview.goBack()//是否可以前进                     Webview.canGoForward()//前进网页Webview.goForward()//以当前的index为起始点前进或者后退到历史记录中指定的steps//如果steps为负数则为后退,正数则为前进Webview.goBackOrForward(intsteps)

通过按back键时,不退出程序而是返回上一浏览页面

public boolean onKeyDown(int keyCode, KeyEvent event) {               if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {                   mWebView.goBack();                   return true;               }               return super.onKeyDown(keyCode, event);           }

清除webview缓存数据

//清除网页访问留下的缓存//由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.Webview.clearCache(true);//清除当前webview访问的历史记录//只会webview访问历史记录里的所有记录除了当前访问记录Webview.clearHistory();//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据Webview.clearFormData();// 在onDestroy()中移除webview相关操作@Override    public void onDestroyView()    {        if (mWebView != null)// 清除        {            mWebView.setWebChromeClient(null);            mWebView.setWebViewClient(null);            // 先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。            mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);            mWebView.clearCache(true);            mWebView.clearHistory();            mWebView.clearFormData();            mWebView.clearSslPreferences();            mWebView.clearMatches();            mWebView.clearView();        }        if (mMainView != null)        {            mMainView.removeAllViews();            if (mWebView != null)            {                mWebView.destroy();                mWebView = null;            }        }        super.onDestroyView();    }

配置步骤1:添加访问网络权限(AndroidManifest.xml)

<uses-permission android:name="android.permission.INTERNET"/>

配置步骤2:生成一个WebView组件(有两种方式)

//方式1:直接在在Activity中生成WebView webView = new WebView(this)//方法2:在Activity的XML文件里添加webview控件:WebView webview = (WebView) findViewById(R.id.webView1);

配置步骤3:进行配置-利用WebSettings子类(常见方法)

//声明WebSettings子类WebSettings webSettings = webView.getSettings();//其他细节设置webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存 webSettings.setAllowFileAccess(true); //设置可以访问文件 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式//如果访问的页面中要与Javascript交互,则webview必须设置支持JavascriptwebSettings.setJavaScriptEnabled(true);  //支持插件webSettings.setPluginsEnabled(true); //设置自适应屏幕,两者合用webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小//缩放操作webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件// 缓存     webSetting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);webSetting.setAppCacheMaxSize(Long.MAX_VALUE);webSetting.setAppCacheEnabled(true);

WebViewClient 的方法全解

doUpdateVisitedHistory(WebView view, String url, boolean isReload)  //(更新历史记录) onFormResubmission(WebView view, Message dontResend, Message resend) //(应用程序重新请求网页数据) onLoadResource(WebView view, String url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。 onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (报告错误信息) onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(获取返回信息授权请求) onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重写此方法可以让webview处理https请求。onScaleChanged(WebView view, float oldScale, float newScale) // (WebView发生改变时调用) onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被加载时调用) shouldOverrideKeyEvent(WebView view, KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。 shouldOverrideUrlLoading(WebView view, String url) //在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。