1、加载网页、刷新网页、前进、后退
在xml文件中
在java代码中:
WebView wvTest = (WebView)findViewById(R.id.wv_banner);
//加载网络网页
wvTest.loadUrl("http://www.baidu.com");
//加载本地网页
wvTest.loadData("file:///android_asset/refresh/refresh.html");
//返回上个页面
if(wvTest.canGoBack()){wvTest.goBack();
}
//去刚才浏览的页面
if(wvTest.canGoForward()){wvTest.goForward();
}
//刷新当前页面
wvTest.reload();
2、设置一些参数
注: 需要用到什么设置,随时查一下即可。最后一条在加载含有Html5新标签的网页的时候需要加上这句话。
WebSettings settings = wvTest.getSettings();
settings.setJavascriptEnabled(true);//支持Javascript
settings.setUseWideViewPort(true);//适配屏幕
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);//支持放大缩小
settings.setDisplayZoomControls(false);//隐藏放大缩小的按钮
settings.setDomStorageEnabled(true);//支持Html5标签
……等
3、获取网页标题
class MyWebViewChromeClient extends WebChromeClient{@Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);L.D("title就是网页标题:" + title);}
}
wvTest.setWebChromeClient(new MyWebViewChromeClient());
4、下载文件
wvTest.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype, long contentLength) {//需要下载的文件的地址就是url,及可以下载文件 }
});
调用系统浏览器去下载文件(updateUrl是下载地址):
Intent intent= new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(updateUrl);
intent.setData(content_url);
startActivity(Intent.createChooser(intent, "请选择浏览器"));
5、WebView错误码处理
就在网页加载失败、没有网络的情况下WebView会把加载的网页地址显示出来。为了避免这种情况,我们需要做如下处理:
class MyWebViewClient extends WebViewClient{@Overridepublic void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {super.onReceivedError(view, errorCode, description, failingUrl);//在这里进行加载错误、没有网络情况的处理//方式1:加载一个本地的默认页面wvTest.loadData("file:///android_asset/refresh/refresh.html");//方式2:显示一个默认布局tvDefault.setText("网页加载失败");wvTest.setVisibility(View.GONE);}
}
wvTest.setWebViewClient(new MyWebViewClient());
6、和Javascript交互(简单的调用、传值)
Java代码:
//被Javascript调用的类
class CalledByJs {private Context mContext;public CalledByJs(Context context){this.mContext = context;}//在js中被调用的方法@JavascriptInterfacepublic void callFromJs(){Toast.makeText(mContext, "js调用啦~", Toast.LENGTH_LONG).show();}
}settings.setJavascriptEnabled(true);
wvTest.addJavascriptInterface(new CalledByJs(this), "demo");
Javascript代码:
function call(){demo.callFromJs();
}
![]()
7、WebView自定义拦截
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {if(!TextUtils.isEmpty(url)){if("open_login".equals(url)){Intent intent = new Intent(this,LoginActivity.class);startActivity(intent);return true;}else {return false;}}return super.shouldOverrideUrlLoading(view, url);
}
这里解释一下这个方法的返回值:
返回true:
webview处理url是根据程序来执行的。即:如果返回为true,即不再会通过webview加载,而是执行你写的拦截的程序,如果没有的话就不执行(不执行就是,内容有href,超链接也不会跳转了)
返回false:
webview处理url是在webview内部执行。返回false的话就可以执行内容的超链接跳转。
8、获取Web页面的标题,显示Web加载进度
其中显示Web页面加载进度有两种方式:
class MyChromeClient extends WebChromeClient{//获取Web页面标题@Overridepublic void onReceivedTitle(WebView view, String title) {title(title);if(TextUtils.isEmpty(shareDesc)){shareDesc = title;shareTitle = title;}}//显示Web页面加载进度 方式1:@Overridepublic void onProgressChanged(WebView view, int newProgress){if (newProgress == 100) {pbWebLoad.setVisibility(View.GONE);} else {if (View.GONE == pbWebLoad.getVisibility()) {pbWebLoad.setVisibility(View.VISIBLE);}pbWebLoad.setProgress(newProgress);}super.onProgressChanged(view, newProgress);}
}//显示Web页面加载进度 方式2:
private class MyWebViewClient extends WebViewClient{
@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);//弹Loading框进行加载}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);//消失Loading框,加载完毕}
}
9、清空WebView缓存
/*** WebView清空缓存*/
public static void clearCache(Context context) {COOKIESyncManager COOKIESyncMngr = COOKIESyncManager.createInstance(context);COOKIEManager COOKIEManager = COOKIEManager.getInstance();COOKIEManager.removeAllCOOKIE();context.deleteDatabase("webview.db");context.deleteDatabase("webviewCache.db");context.deleteDatabase("webviewCOOKIEsChromium.db");context.deleteDatabase("webviewCOOKIEsChromiumPrivate.db");//WebView 缓存文件 File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath()+"/webviewCacheChromium"); //删除webview 缓存目录 if(webviewCacheDir.exists()){ deleteFile(webviewCacheDir); }
}
10、访问https地址
wvTest.setWebViewClient(new WebViewClient(){@Overridepublic void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {super.onReceivedSslError(view, handler, error);//handler.cancel(); // Android默认的处理方式handler.proceed(); // 接受所有网站的证书//handleMessage(Message msg); // 进行其他处理}});