介绍:
Android提供了一个内置浏览器,该浏览器可以查看网站,查看邮件,播放视频。要使用该内置浏览器,要通过WebView组件实现,WebView组件是专门来浏览网页的。
(一)将WebView加入你的应用
要在你的应用中加入WebView,只需要在你的活动布局中加入<WebView>元素即可
<WebView>
android:id = "@+id/WebView"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
</WebView>
(二)使用WebView加载页面
(三)获取网络访问权限
在它有效工作之前,你要保证你的应用能访问网络。要访问网络,需要在你的配置文件中获取INTERNET权限。
<manifest...>
<uses-permission android:name = "android.permission.INTERNET"/>
...
</manifest>
(四)处理页面导航
当用户点击一个WebView中的页面的链接时,通常,是由默认的系统浏览器或者第三方打开并加载目标URL的,然而,你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开。
webView.setWebViewClient(new WebViewClient(){
//返回值是true的时候控制网页在WebView中去打开,
//如果是false调用系统浏览器或第三方浏览器
view.loadUrl(url);
return true;
});
//WebViewClient帮助WebView去处理一些页面控制和请求通知
(五)在WebView中使用Javascript
如果你想要你加载在WebView中的web页面使用Javascript,你需要在WebView中启动Javascript。启动Javascript你可以通过WebView中带有的WebSettings来启动它。你可以通过getSettings()来获取WebSettings的值,然后通过setJavaScriptEnable() 来启用Javascript。
WebView webView = (WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
(六)后退与前进
当你的WebView覆盖了URL加载,它会自动生成历史访问记录。你可以通过goBack()或goForward()向前或向后访问已访问过的站点。
改写物理按键-----返回的逻辑:onKeyDown
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode == KeyEvent.KEYCODE_BACK)
{
if(webView.canGoBack())
{
webView.goBack();//返回上一页面
return true;
}else
{
System.exit(0);//退出程序
}
return super.onKeyDown(keyCode,event);
}
(七)判断页面加载过程
由于有些网页可能加载缓慢,所以我们需要去判断页面的加载过程,制作进度条给予用户良好的体验效果
webView.setWebChromeClient(new WebChromeClient)(){
@Override
public void onProgressChanged(WebView view,int newProgress){
//newProgress 1-100之间的整数
if(newProgress == 100){
//网页加载完毕,关闭ProgressDialog
closeDialog();
}else
{
//网页正在加载,打开ProgressDialog
openDialog(newProgress);
}
}
private void closeDialog(){
if(dialog != null && dialog.isShowing())
{
dialog.dismiss();
dialog = null;
}
}
private void openDialog(int newProgress){
if(dialog == null)
{
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("正在加载");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.show();
}
else
{
dialog.setProgress(newProgress);
}
}
});
(八)WebView缓存的运用
WebSettings settings = webView.getSettings();
优先使用缓存: webView.getSettings().setCacheMode
(WebSettings.LOAD_CACHE_ELSE_NETWORK);
不使用缓存:webView.getSettings().setCacheMode
(WebSetting.LOAD_NO_CACHE);
WebSettings的常用方法
方法 | 描述 |
setJavaScriptEnabled(boolean flag) | 设置是否支持Javascript |
setBlockNetworkImage(boolean flag) | 设置是否阻止网络图片加载 |
setBuiltInZoomControls(boolean enabled) | 将HTML文本内容加载到WebView中 |
setCacheMode(int mode) | 设置缓存模式 |
setDefaultFontSize(int size) | 设置默认字体大小 |
setFixedFontFamily(String font) | 设置固定使用的字体 |
setDefaultTextEncodingName(String encoding) | 设置解码时默认的字符集 |
setSupportZoom(boolean support) | 设置是否支持变焦 |
setAllowFileAccess(boolean allow) | 设置是否允许访问WebView中文件。就是file:///android_asset和file:///android_res路径下的资产和资源文件。默认允许访问。 |
WebChromeClient常用方法
方法 | 描述 |
onJsAlert() | 处理Javascript中Alert对话框 |
onJsConfirm() | 处理Javascript中Confirm对话框 |
onJsPrompt() | 处理Javascript中Prompt对话框 |
onProgressChanged() | 加载进度条改变 |
onCloseWindow() | 关闭WebView |
onCreateWindow() | 创建WebView |
onReceivedIcon() | Icon图标改变 |
onReceivedTitle() | 网页Title改变 |
WebViewClient常用方法
方法 | 描述 |
shouldOverrideUrlLoading() | 新的链接在当前WebView中打开 |
onPageStarted() | 网页开始加载 |
onPageFinished() | 网页加载完毕 |
doUpdateVisitedHistory() | 更新访问历史记录的数据库 |
onLoadResource() | 加载指定Url地址提供的资源 |
onFormResubmission() | 应用程序重新请求网页数据 |
onScaleChanged() | WebView发生改变 |