简单粗暴有效的代码
案例代码:
package com.itcast.webviewdemo;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends Activity {
private WebView mWebview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.控件的加载-------------------------------
mWebview = (WebView) findViewById(R.id.webview);
//2.设置对象的获取-------------------------------
WebSettings settings = 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(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
System.out.println("开始加载网页....");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
System.out.println("网页加载结束....");
}
// webview的所有链接跳转都会走此回调方法
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
System.out.println("跳转链接:" + url);
// 如果希望一直在当前webview加载网页, 而不跳转浏览器的话
view.loadUrl(url);
// <a href="tel:110">联系我们</a>
return true;
// return super.shouldOverrideUrlLoading(view,
// url);//此方法是由系统决定使用当前webview加载还是跳浏览器
}
});
mWebview.setWebChromeClient(new WebChromeClient() {
// 网页加载进度发生变化
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
System.out.println("progress-->" + newProgress);
}
// 获取网页标题
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
System.out.println("网页标题:" + title);
}
});
// <a onClick="window.demo.onCallback()">点我!</a>
// 网页调用格式: window.NAME.回调方法名称
mWebview.addJavascriptInterface(new OnJsCallback() {
@JavascriptInterface//注意:此处一定要加该注解,否则在4.1+系统上运行失败
@Override
public void onCallback() {
Toast.makeText(getApplicationContext(), "Js调用Android啦",
Toast.LENGTH_SHORT).show();
}
}, "demo");
// 使用webview加载网页
mWebview.loadUrl("http://www.baidu.com");// wap网页
}
@Override
public void onBackPressed() {
if (mWebview.canGoBack()) {// 判断是否可以跳到上一个页面
mWebview.goBack();// 跳到上一个页面
} else {
finish();
}
// mWebview.goForward();//跳到下一个页面
// mWebview.canGoForward();//是否可以跳到下一个页面
}
// Android调用Js
public void androidCallJs(View view) {
// 直接使用webview加载js就可以了
mWebview.loadUrl("javascript:wave()");
}
// js调用android的回调接口
public interface OnJsCallback {
public void onCallback();
}
}