一、通过Intent调用系统浏览器
在Layout XML文件中添加控件WebView;
Uri uri=Uri.parse(url); //url为链接地址,如http://www.ifeng.com ,不能缺少http://
Intent intent =new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
二、在WebView中加载页面,通过WebView对象webView使用loadUrl()。
1.web资源:webView.loadUrl("http://www.baidu.com"); 通常由默认的系统浏览器或第三方浏览器打开并加载目标URL。但你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开。
webView.setWebViewClient(new WebViewClient(){
//WebViewClient帮助WebView去处理一些页面控制和请求通知,该类还有其他方法
@Override
public boolean shouldOverrideUrlLoading(WebView view,String url)
{
//返回值为true时,控制网页在WebView中打开;为false时,调用系统或第三方浏览器打开。
//return super.shouldOverrideUrlLoading(view,url);
view.loadUrl(url);
return true;
}
});
2.本地文件:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在assets文件夹中
3.使页面获得焦点:webView.requestFocus(); 若web页面有文本输入框,需获得焦点,否则点击时可能无响应。
三、获取网络访问权限
1.若调用系统的软件访问web,是不需要获取网络访问权限的。
2.但是如果我们的App要直接访问网络资源,需配置manifest文件,获取INTERNET权限。
<manifest ...>
<uses-permission android:name = "android.permission.INTERNET"/>
...
</manifest>
四、在WebView中启用Javascript:在WebView加载的web页面中使用Javascript,需在WebView中启用Javascript。
1.通过WebView类的getSettings()方法获取WebSettings的值
WebSettings webSettings=webView.getSettings();
2.通过WebSettings类的setJavaScriptEnabled()来启用Javascript
webSettings.setJavaScriptEnabled(true);
实验至此:浏览网页时,按返回,不是返回上一级网页,而是直接退出了app应用,用户体验差。
五、后退与前进
当WebView覆盖了URL加载后,会自动生成历史访问记录,可以通过goBack()或goForward()向前或向后访问已访问过的站点。
@Override 改写手机物理按键--返回的逻辑
public boolean onKeyDown(int keyCode,keyEvent event){
if ( keyCode==KeyEvent.KEYCODE_BACK){
if( webView.canGoBack() ){
webView.goBack();
return true;
}
else
System.exit(0); //退出程序,有的网页需按返回键多次才会退出app,是因为这些网站用了重定向的技术
}
return super.onKeyDown(keyCode,event);
}
六、判断页面加载过程:由于有些网页可能加载缓慢,所以需要去判断页面的加载过程,制作进度条给予用户良好的体验效果。
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view,int newProgress){
if(newProgress==100){//加载完成,关闭ProgressDialog
myClosseDialog();
}else{
//加载中,打开ProgressDialog
myOpenDialog(newProgress);
}
}
});
七、WebView缓存的运用
1.优先使用缓存:webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
2.不使用缓存(默认):webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);