...
WebView.loadUrl(“content://com.android.htmlfileprovider/sdcard/XX.html”);
String htmlString = "
This is HTML XX
Formatted in italics
AnothorLine
// 载入这个html页面
WebView.loadData(htmlString, "XX/html", "utf-8");
//激活WebView为活跃状态,能正常执行网页的响应
webView.onResume() ;
//当页面被失去焦点被切换到后台不可见状态,需要执行onPause()
//通过onPause()动作通知内核暂停所有的动作,比如DOM的解析、JavaScript执行等
webView.onPause();
//当应用程序(存在webview)被切换到后台时,这个方法不仅仅针对当前的webview而是全局的全应用程序的webview
//它会暂停所有webview的布局显示、解析、延时,从而降低CPU功耗
webView.pauseTimers()
//恢复pauseTimers状态
webView.resumeTimers();
//销毁Webview //在关闭了Activity时,如果Webview的音乐或视频,还在播放,就必须销毁Webview。
//但是注意:webview调用destory时,webview仍绑定在Activity上
//这是由于自定义webview构建时传入了该Activity的context对象
//因此需要先从父容器中移除webview,然后再销毁webview
rootLayout.removeView(webView);
webView.destroy();
//是否可以后退
Webview.canGoBack()
//后退网页
Webview.goBack()
//是否可以前进
Webview.canGoForward()
//前进网页
Webview.goForward()
//以当前的index为起始点前进或者后退到历史记录中指定的steps
//如果steps为负数则为后退,正数则为前进
Webview.goBackOrForward(intsteps)
//清除网页访问留下的缓存
//由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
Webview.clearCache(true);
//清除当前webview访问的历史记录
//只会webview访问历史记录里的所有记录除了当前访问记录
Webview.clearHistory();
//这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据
Webview.clearFormData();
Webview.setOverScrollMode(View.OVER_SCROLL_ALWAYS); //不允许弹性
Webview.setHorizontalScrollBarEnabled(false); // 水平不显示滚动条
Webview.setLayerType(View.LAYER_TYPE_HARDWARE, null);//开启硬件加速
//声明WebSettings子类
WebSettings webSettings = Webview.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
//支持通过JS打开新窗口
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
//支持插件
WebSettings.setPluginsEnabled(true);
//支持缩放,下一步的前提
webSettings.setSupportZoom(false);
//设置支持缩放
webSettings.setBuiltInZoomControls(false);
//隐藏原生的缩放控件
WebSettings.setDisplayZoomControls(false);
//自适应屏幕,两者合用
//打开页面时, 自适应屏幕,将图片调整到适合webview的大小,设置此属性,可任意比例缩放
webSettings.setUseWideViewPort(true);
//缩放至屏幕的大小
webSettings.setLoadWithOverviewMode(true);
//缓存
// LOAD_CACHE_ONLY: //不使用网络,只读取本地缓存数据,
// LOAD_DEFAULT://根据cache-control决定是否从网络上取数据,
// LOAD_CACHE_NORMAL://API level 17中已经废弃, 从API level 11开始作用同- - LOAD_DEFAULT模式,
// LOAD_NO_CACHE: //不使用缓存,只从网络获取数据,
// LOAD_CACHE_ELSE_NETWORK //只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setAllowFileAccess(true); //是否可访问本地文件,默认值 true
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setTextZoom(12); //设置字体大小
webSettings.setDomStorageEnabled(true);
webSettings.setDefaultTextEncodingName("UTF-8"); //设置编码格式
webSettings.setAllowContentAccess(true); // 是否可访问Content Provider的资源,默认值 true
// 是否允许通过file url加载的Javascript读取本地文件,默认值 false
webSettings.setAllowFileAccessFromFileURLs(false);
// 是否允许通过file url加载的Javascript读取全部资源(包括文件,http,https),默认值 false
webSettings.setAllowUniversalAccessFromFileURLs(false);
webView.setWebViewClient(new WebViewClient(){
//打开网页不用系统浏览器打开,在webview中直接显示
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
//开始载入页面时调用此方法,在这里我们可以设定一个loading的页面,告诉用户程序正在等待网络响应。
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//设定加载开始的操作
}
//在页面加载结束时调用。我们可以关闭loading 条,切换程序动作。
@Override
public void onPageFinished(WebView view, String url) {
//设定加载结束的操作
}
//在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次
@Override
public boolean onLoadResource(WebView view, String url) {
//设定加载资源的操作
}
//加载页面的服务器出现错误时调用
//App里面使用webview控件的时候遇到了诸如404这类的错误的时候,若也显示浏览器里面的那种错误提示页面就显得很丑陋了,那么这个时候我们的app就需要加载一个本地的错误提示页面,即webview如何加载一个本地的页面
//步骤1:写一个html文件(error_handle.html),用于出错时展示给用户看的提示页面
//步骤2:将该html文件放置到代码根目录的assets文件夹下
//步骤3:复写WebViewClient的onRecievedError方法 //该方法传回了错误码,根据错误类型可以进行不同的错误分类处理
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
switch(errorCode) {
case HttpStatus.SC_NOT_FOUND:
view.loadUrl("file:///android_assets/error_handle.html");
break;
}
}
//处理https请求,webView默认是不处理https请求的,页面显示空白
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); //表示等待证书响应
// handler.cancel(); //表示挂起连接,为默认方式
// handler.handleMessage(null); //可做其他处理
}
});
webview.setWebChromeClient(new WebChromeClient(){
//获得网页的加载进度并显示
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress < 100) {
String progress = newProgress + "%";
progress.setText(progress);
} else {
progress.setText(“100%”);
}
}
//获取Web页中的标题
@Override
public void onReceivedTitle(WebView view, String title) {
titleview.setText(title);
}
);
//无参调用
Webview.loadUrl(“javascript:javacalljs()”);
//传递参数
Webview.loadUrl(“javascript:javacalljsString(‘”+content+”’)”);
WebView.evaluateJavascript(“javascript:javacalljs()”, new ValueCallback
@Override
Public void onReceiveValue(String str){
...
}
});
//新建一个接口类JavaInterface ,里面定义给Js调用的方法。这些方法必须是public的,而且必 须使用@JavascriptInterface进行注解。
Private class MyJsInterface{
@JavascriptInterface//js接口声明
Public void tackPhoto(){//无参数调用
...
}
@JavascriptInterface
Public void setUserId(int userId){//传递参数调用
...
}
/**
* 前端代码嵌入js:
* imageClick 名应和js函数方法名一致
*
* @param src 图片的链接
*/
@JavascriptInterface
public void imageClick(String src) {
...
}
}
//给Webview添加与Js的映射关系
WebView.addJavascriptInterFace(new MyJsInterface(this) , ”android”);
// 这段js函数的功能就是,遍历所有的img节点,并添加onclick函数,函数的功能是在图片点 击的时候调用本地java接口并传递url过去
webView.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName(\"img\");" +
"for(var i=0;i "{" + "objs[i].οnclick=function(){window.android.imageClick(this.getAttribute(\"src\"));}" + "}" + "})()"); webView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { final WebView.HitTestResult hitTestResult = WebView.getHitTestResult(); // 如果是图片类型或者是带有图片链接的类型 if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE || hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { // 弹出保存图片的对话框 new AlertDialog.Builder(WebViewActivity.this) .setItems(new String[]{"查看大图", "保存图片到相册"}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String picUrl = hitTestResult.getExtra(); //获取图片 Log.e("picUrl", picUrl); switch (which) { case 0: break; case 1: break; default: break; } } }) .show(); return true; } return false; } });