android WebView 详细代码

简单粗暴有效的代码

案例代码:

packagecom.itcast.webviewdemo;

importandroid.app.Activity;

importandroid.graphics.Bitmap;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.webkit.JavascriptInterface;

importandroid.webkit.WebChromeClient;

importandroid.webkit.WebSettings;

importandroid.webkit.WebView;

importandroid.webkit.WebViewClient;

importandroid.widget.Toast;

publicclassMainActivityextendsActivity{

privateWebViewmWebview;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//1.控件的加载-------------------------------

mWebview=(WebView)findViewById(R.id.webview);

//2.设置对象的获取-------------------------------

WebSettingssettings=mWebview.getSettings();//获取设置对象

//3.设置参数的添加-------------------------------

settings.setJavaScriptEnabled(true);//支持js效果

settings.setBuiltInZoomControls(true);//显示放大缩小按钮(不支持wap网页)

settings.setUseWideViewPort(true);//支持双击缩放(不支持wap网页)

//webview加缓存

//settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//

//只要有缓存,就优先加载缓存;没缓存就请求网络

//settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//只加载缓存

//settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不加载缓存

//根据cache-control决定是否从网络上取数据

//什么是cache-control?

//cache-control是在请求网页时服务器的响应头,此响应头用于决定网页的缓存策略.

//常见的取值有public(所有内容都将被缓存),

//private(内容只缓存到私有缓存中),no-cache(所有内容都不会被缓存),max-age=xxx(缓存的内容将在xxx

//秒后失效)等等

settings.setCacheMode(WebSettings.LOAD_DEFAULT);//默认模式

//mWebview.clearCache(true);//清除缓存

mWebview.setWebViewClient(newWebViewClient(){

@Override

publicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon){

super.onPageStarted(view,url,favicon);

System.out.println("开始加载网页....");

}

@Override

publicvoidonPageFinished(WebViewview,Stringurl){

super.onPageFinished(view,url);

System.out.println("网页加载结束....");

}

//webview的所有链接跳转都会走此回调方法

@Override

publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){

System.out.println("跳转链接:"+url);

//如果希望一直在当前webview加载网页,而不跳转浏览器的话

view.loadUrl(url);

//<ahref="tel:110">联系我们</a>

returntrue;

//returnsuper.shouldOverrideUrlLoading(view,

//url);//此方法是由系统决定使用当前webview加载还是跳浏览器

}

});

mWebview.setWebChromeClient(newWebChromeClient(){

//网页加载进度发生变化

@Override

publicvoidonProgressChanged(WebViewview,intnewProgress){

super.onProgressChanged(view,newProgress);

System.out.println("progress-->"+newProgress);

}

//获取网页标题

@Override

publicvoidonReceivedTitle(WebViewview,Stringtitle){

super.onReceivedTitle(view,title);

System.out.println("网页标题:"+title);

}

});

//<aonClick="window.demo.onCallback()">点我!</a>

//网页调用格式:window.NAME.回调方法名称

mWebview.addJavascriptInterface(newOnJsCallback(){

@JavascriptInterface//注意:此处一定要加该注解,否则在4.1+系统上运行失败

@Override

publicvoidonCallback(){

Toast.makeText(getApplicationContext(),"Js调用Android啦",

Toast.LENGTH_SHORT).show();

}

},"demo");

//使用webview加载网页

mWebview.loadUrl("http://www.baidu.com");//wap网页

}

@Override

publicvoidonBackPressed(){

if(mWebview.canGoBack()){//判断是否可以跳到上一个页面

mWebview.goBack();//跳到上一个页面

}else{

finish();

}

//mWebview.goForward();//跳到下一个页面

//mWebview.canGoForward();//是否可以跳到下一个页面

}

//Android调用Js

publicvoidandroidCallJs(Viewview){

//直接使用webview加载js就可以了

mWebview.loadUrl("javascript:wave()");

}

//js调用android的回调接口

publicinterfaceOnJsCallback{

publicvoidonCallback();

}

}