首页 > 系统 > Android > 正文

Android——初识WebView面孔...

2019-11-09 15:07:15
字体:
来源:转载
供稿:网友

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

这里写图片描述

现在使用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

的参数文件添加此权限:

这里写图片描述

<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.INTERNET"/>

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);
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表