之前在跳转那部分有说到调用系统浏览器或者第三方软件打开网页,

现在使用WebView网络视图来进行加载。
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页。
webview有两个方法:setWebChromeClient 和 setWebClient
setWebClient:主要处理解析,渲染网页等浏览器做的事情
setWebChromeClient:辅助WebView处理javascript的对话框,网站图标,网站title,加载进度等
WebViewClient就是帮助WebView处理各种通知、请求事件的。
看看WebView的效果图:

在WebView中需要注意以下几点:
1、WebView加载资源分两种:本地资源和Web资源。
互联网用:webView.loadUrl(“http://www.baidu.com“);
本地文件用:webView.loadUrl(“file:///android_asset/XX.html”);
本地文件存放在:assets 文件中
2、即使是使用WebView加载,系统默认仍会选择系统浏览器而不是WebView,如果有第三方的话会在系统浏览器和第三方软件
之间作选择,所以我们需要覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页通过WebView打开。
wv.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true控制网页在WebView打开,false则第三方或者系统浏览器打开 view.loadUrl(url); return true; //WebViewClient是帮助WebView处理一些页面控制或者请求通知 } });3、WebView同时需要有网络权限的支持,如果第三方浏览器或者系统浏览器是自动允许上网的,而WebView则需要在
androidmanifest中设置,在下面选择Permissions中添加Uses Permission,右面选择Internet即可,自动会在androidmanifest
的参数文件添加此权限:

4、WebView可以和js相互交互,可以启用Javascript。
//wv是WebView控件的定义WebSettings settings = wv.getSettings();//获得WebView设置 settings.setJavaScriptEnabled(true);5、在WebView会出现一个问题,就是当你浏览网页很多时,要返回上一页,但是点Back键之后却直接退出程序了,所以我们得
自己设置改写物理按键–返回的逻辑。
public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==KeyEvent.KEYCODE_BACK) { if(wv.canGoBack()) { wv.goBack(); //消耗事件 return true; } else { //返回到首页时,有可能会出现再次刷新跳转首页,是采用了页面的重定向。多次按back即可退出 System.exit(0); } } return super.onKeyDown(keyCode, event); }如果返回的键值代码keycode等于按键中的Back键,要考虑WebView是否能够返回,能返回时则消耗此事件返回true结束此函
数,不能返回即到达了第一页,直接退出程序即可。
6、在加载网页过程中,在完整出现加载好网页之前有段时间会是空白,给用户不好的体验,所以为了体验更好的人机交互,我们
加入进度条的读取。
wv.setWebChromeClient(new WebChromeClient(){ @Override public void onPRogressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub super.onProgressChanged(view, newProgress); //newProgress 1-100之间的整数 if(newProgress==100) { closeDialog(); } else { openDialog(newProgress); } } private void closeDialog() { // TODO Auto-generated method stub // pd是ProgressDialog的定义 if(pd!=null&&pd.isShowing()) { pd.dismiss(); pd=null; } } private void openDialog(int newProgress) { // TODO Auto-generated method stub if(pd==null) { pd=new ProgressDialog(MainActivity.this); pd.setTitle("正在加载"); pd.setProgress(newProgress); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.show(); } else { pd.setProgress(newProgress); } } });7、为了更好的处理好WebView的加载速度的问题,我们加入缓存机制,提前将浏览到的信息保存在本地,下次打开便快了许多。
//WebView优先使用缓存 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);新闻热点
疑难解答