本文介绍: 什么是WebViewWebView是Android中UI组件的一种,WebView基于webkit内核,不过由于兼容性的原因在Android5.0后改为了Chromium内核。WebView可以用来展示网页,常用于我们不想打开浏览器但又想浏览网页的情况。WebView的使用WebVeiw的常用方法加载网页的四种方式loadUrl(String url) //打开百度网webView.loadUrl(“https://www.baidu.com/”); //打开sdcard卡的html

什么是WebView

WebView是Android中UI组件的一种,WebView基于webkit内核,不过由于兼容性的原因在Android5.0后改为了Chromium内核
WebView可以用来展示网页,常用于我们不想打开浏览器但又想浏览网页的情况。

WebView的使用

WebVeiw的常用方法

加载网页的四种方式

loadUrl(String url)

 //打开百度网
 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:根据cachecontrol决定是否从网络获取
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

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进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注