WebView基本使用:
1、加载网页、刷新网页、前进、后退
在xml文件中
<WebView
android:id="@+id/wv_test"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在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{
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
L.D("title就是网页标题:" + title);
}
}
wvTest.setWebChromeClient(new MyWebViewChromeClient());
4、下载文件
wvTest.setDownloadListener(new DownloadListener() {
@Override
public 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{
@Override
public 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中被调用的方法
@JavascriptInterface
public void callFromJs(){
Toast.makeText(mContext, "js调用啦~", Toast.LENGTH_LONG).show();
}
}
settings.setJavaScriptEnabled(true);
wvTest.addJavascriptInterface(new CalledByJs(this), "demo");
JavaScript代码:
function call(){
demo.callFromJs();
}
<img src="img/refreshicon.png" onclick="call()" alt="轻触屏幕重新刷新" />
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页面标题
@Override
public void onReceivedTitle(WebView view, String title) {
title(title);
if(TextUtils.isEmpty(shareDesc)){
shareDesc = title;
shareTitle = title;
}
}
//显示Web页面加载进度 方式1:
@Override
public 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{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
//弹Loading框进行加载
}
@Override
public 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(){
@Override
public void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
//handler.cancel(); // Android默认的处理方式
handler.proceed(); // 接受所有网站的证书
//handleMessage(Message msg); // 进行其他处理
}
});
WebView内核:http://blog.csdn.net/typename/article/details/40425275
网友评论