什么是WebView
WebView是Android中UI组件的一种,WebView基于webkit内核,不过由于兼容性的原因在Android5.0后改为了Chromium内核。
WebView可以用来展示网页,常用于我们不想打开浏览器但又想浏览网页的情况。
WebView的使用
WebVeiw的常用方法
加载网页的四种方式
//打开百度网页
webView.loadUrl("https://www.baidu.com/");
//打开sdcard卡的html页面
//webView.loadUrl("file://" + Environment.getExternalStorageDirectory() + "/1/index.html");
//资源文件下的html页面
//webView.loadUrl("file://android_asset/index.html");
//设置在当前页面打开要显示的网页
webView.setWebViewClient(new WebViewClient());
loadUrl(String url, Map<String, String> additionalHttpHeaders)
第一个参数是要加载网页的url,第二个参数是键值对形式的请求参数,会被加入到请求头中。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Map<String,String> reqHeaders = new HashMap<>();
reqHeaders.put("android-webview-demo","testRequestHeaders");
webView.loadUrl("https://www.baidu.com/");
return super.shouldOverrideUrlLoading(view, url);
}
});
loadData(String data, String mimeType, String encoding)
可以将一段html代码加载到网页中
webView.loadData("<h1>hello world</h1>","text/html","utf-8");
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
这里要加载的网页的url是baseUrl+data,mimeType是响应类型,encoding是编码,historyUrl设置回退时回退到哪个网页
webView.loadDataWithBaseURL("https://www.imooc.com/","<img src = "static/img/index/logo2020.png"/> <a href = "https://www.baidu.com">百度</a>","text/html","utf-8","https://www.sogou.com");
webView.setWebViewClient(new WebViewClient());
控制网页的前进和后退
boolean canGoBack():是否可以后退;
boolean canGoForward():是否可以前进;
boolean canGoBackOrForward(int steps):是否可以前进或后退一定步数,负数代表后退,正数代表前进;
void clearHistory():清除历史;
void goBack():后退;
void goForward():前进;
void goBackOrForward(int steps):前进或后退一定步数,负数代表后退,正数代表前进;
public void onClear(View view) {
webView.clearHistory();
}
public void onCanBack(View v) {
Toast.makeText(this,String.valueOf(webView.canGoBack()),Toast.LENGTH_SHORT).show();
}
public void onGoBack(View v) {
webView.goBack();
}
public void onCanGoForward(View v) {
Toast.makeText(this,String.valueOf(webView.canGoForward()),Toast.LENGTH_SHORT).show();
}
public void onGoForward(View v) {
webView.goForward();
}
public void onCanGoBackOrForward(View v) {
int steps = Integer.valueOf(et.getText().toString());
Toast.makeText(this,String.valueOf(webView.canGoBackOrForward(steps)),Toast.LENGTH_SHORT).show();
}
public void onGoBackOrForward(View v) {
int steps = Integer.valueOf(et.getText().toString());
webView.goBackOrForward(steps);
}
WebView的状态管理
WebView的状态管理用于
WebView的
onPause():
onResume():
resumeTimers():
pauseTimers():
destroy():
WebSettings
使用WebSettings可以对webview进行配置和管理。
控制网页的缩放
setSupportZoom(boolean):是否支持缩放
setBuiltInZoomControls(boolean):设置内置的缩放控件
setDisplayZoomControls(boolean):是否隐藏原生的缩放控件
控制网页缓存策略
LOAD_CACHE_ONLY:永远不使用网络,只去本地缓存,没有缓存则不会加载;
LOAD_CACHE_ELSE_NETWORK:只要本地有缓存,无论是否过期都会去使用本地缓存,没有缓存才会去加载网络;
LOAD_DEFAULT:根据cache–control决定是否从网络获取;
LOAD_NO_CACHE:永远不使用缓存,只从网络获取;
WebSettings settings = webView.getSettings();
//设置要访问的页面可以运行js
settings.setJavaScriptEnabled(true);
//设置可以进行缩放
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(true);
//设置缓存策略
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
WebViewClient
方法签名 | 作用 |
---|---|
WebResourceResponse shouldInterceptRequest(WebViewview, String url) | 进行资源请求的时候回调 |
void onPageStarted(WebViewview, String url, Bitmap favicon) | 网页已经开始加载的时候回调 |
void onLoadResource(WebViewview, String url) | 加载网页资源之前回调 |
boolean shouldOverrideUrlLoading(WebView view, String url) | webview将要加载新的url时进行回调 |
void onReceivedError(WebViewview, interrorCode, String description, String failingUrl) | 网页访问发生错误的时候回调 |
void onPageFinished(WebViewview, String url) | 网页加载完成的时候回调 |
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) | 重载方法,在Android7.0以后才能使用 |
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) | 重载方法,在Android5.0以上才能使用 |
void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) | 重载方法,Android6.0及以上才能使用 |
shouldInterceptRequest方法会在onLoadResource方法之前被调用。 |
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
}
/**
* android7.0以上才可以使用,可以利用此方法进行方法拦截
* @param view
* @param request
* @return
*/
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Map<String,String> reqHeaders = new HashMap<>();
reqHeaders.put("android-webview-demo","testReqHeaders");
webView.loadUrl("http://192.168.2.124:3000", reqHeaders);
return super.shouldOverrideUrlLoading(view, url);
}
/**
* android5.0以上才能调用
* @param view
* @param request
* @return
*/
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
Log.d(TAG, "shouldInterceptRequest: 方法被调用了");
return super.shouldInterceptRequest(view, request);
}
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Log.d(TAG, "shouldInterceptRequest: 方法被调用了" + url);
return super.shouldInterceptRequest(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d(TAG, "onPageStarted: 网页开始进行加载url: " + url);
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
Log.d(TAG, "onLoadResource:网页开始加载资源url: " + url);
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d(TAG, "onPageFinished: 网页已经加载完成: " + url);
super.onPageFinished(view, url);
}
});
WebChromeClient
辅助webview去处理JavaScript对话框、标题、进度。
booleanonJsAlert(WebViewview, String url, String message, JsResultresult):在网页将要打开一个alert警告对话框的时候回调;
booleanonJsPrompt(WebViewview, String url, String message, String defaultValue, JsPromptResultresult):在网页将要打开一个prompt对话框的时候回调;
booleanonJsConfirm(WebViewview, String url, String message, JsResultresult):在网页将要打开一个confirm对话框的时候回调;
原文地址:https://blog.csdn.net/wsb_2526/article/details/115173525
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_30130.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!