WebView的简单使用

WebView的简单使用

现如今嵌入webview的App有很多了,比如淘宝,京东等App。
WebView继承自view,就是用来展示网页的。


显示外部网页
首先要给网络权限,然后通过loadurl直接加载网址即可。

  /*加载外部网页*/
  webView.loadUrl("http://baidu.com");
  webView.setWebViewClient(new WebViewClient());//直接在webview中加载,不调用外部浏览器

加载本地网页
首先在main下面创建assets文件夹,然后将html文件放入其中。
这里写图片描述

直接通过loadUrl加载即可,注意路径要正确!

 /*加载本地网页*/
 webView.loadUrl("file:///android_asset/index.html");

返回键的处理
如果我们处理返回键的话,当我们点击返回键的时候回直接退出程序,而不是返回到上一页,如果想要返回上一页,那么我们就需要对返回键进行处理。

   /*处理WebView返回事件*/
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == event.KEYCODE_BACK) {
            if (webView.canGoBack()) {
                webView.goBack();
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

WebSettings的使用

这里写图片描述

我们来看看源码的介绍:
WebSettings用来管理WebView的状态,当一个WebView首次被创建时已经包含一组默认的设置集合。我们可以通过getter方法去获取这个集合,通过WebView中的getSettings方法可以获得一个WebSettings对象,如果WebView被销毁,在WebSettings中所有回调方法将抛出IllegalStateException异常。

常用方法:

setSupportZoom(boolean support)		设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放。
setJavaScriptEnabled(boolean flag)	设置WebView是否允许执行JavaScript脚本,默认false,不允许
setJavaScriptCanOpenWindowsAutomatically(boolean flag)	设置脚本是否允许自动打开弹窗,默认false,不允许

WebSettings还有很多其他的方法,具体可以参考websettings详解


WebViewClient##

这里写图片描述

先看看源码的描述:
给主机应用程序一个在当前WebView中加载新url时接管控件的机会。如果WebViewClient没有提供,默认WebView将要求活动管理器为url选择适当的处理程序。如果提供WebViewClient,返回true意味着主机应用程序处理url,而返回false表示当前WebView处理url。使用POST“方法”不调用此方法。

也就实说WebViewClient是帮助WebView处理各种通知和请求事件的,如果我们没有给WebView设置WebViewClient的话,那么加载url时会调用系统的浏览器。

常用方法:

 webView.setWebViewClient(new WebViewClient(){

            /*历史记录被更新时调用*/
            @Override
            public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
                super.doUpdateVisitedHistory(view, url, isReload);
            }


            /*应用程序重新请求网页数据时调用*/
            @Override
            public void onFormResubmission(WebView view, Message dontResend, Message resend) {
                super.onFormResubmission(view, dontResend, resend);
            }


            /*加载页面资源时调用  每个资源被加载时都会调用*/
            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
            }

            /*页面开始加载时调用 */
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }


            /*页面加载完毕时调用 */
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return super.shouldOverrideUrlLoading(view, request);
            }

            /*加载错误时调用*/
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
            }


            /*获取网页授权信息时调用*/
            @Override
            public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) {
                super.onReceivedClientCertRequest(view, request);
            }



            /*需要处理https请求时重写此方法*/
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                super.onReceivedSslError(view, handler, error);
            }


            /*webView发生变化时调用*/
            @Override
            public void onScaleChanged(WebView view, float oldScale, float newScale) {
                super.onScaleChanged(view, oldScale, newScale);
            }


            /*网页中的事件未被加载时调用*/
            @Override
            public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
                super.onUnhandledKeyEvent(view, event);
            }

            /*重写此方法可以处理网页中的事件*/
            @Override
            public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
                return super.shouldOverrideKeyEvent(view, event);
            }


            /*点击网页中的链接时调用*/
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return super.shouldOverrideUrlLoading(view, url);
            }


        });


WebChromeClient

这里写图片描述

WebChromeClient 帮助WebView处理JavaScript的对话框、网站图标、网站title、加载进度等。

常用方法:

webView.setWebChromeClient(new WebChromeClient() {


            /*获取vedio标签的预览图*/
            @Override
            public Bitmap getDefaultVideoPoster() {
                return super.getDefaultVideoPoster();
            }


            /*获取在vedio缓冲时的视图*/

            @Override
            public View getVideoLoadingProgressView() {
                return super.getVideoLoadingProgressView();
            }


            /*获取浏览历史记录*/
            @Override
            public void getVisitedHistory(ValueCallback<String[]> callback) {
                super.getVisitedHistory(callback);
            }


            /*创建一个新的窗口时调用*/
            @Override
            public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
            }

            /*关闭webview时调用*/
            @Override
            public void onCloseWindow(WebView window) {
                super.onCloseWindow(window);
            }


            /*进入全屏时调用*/
            @Override
            public void onShowCustomView(View view, CustomViewCallback callback) {
                super.onShowCustomView(view, callback);
            }

            /*退出全屏模式时调用*/
            @Override
            public void onHideCustomView() {
                super.onHideCustomView();
            }

            /*允许显示js对话框  默认不允许*/
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                return super.onJsAlert(view, url, message, result);
            }

            @Override
            public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
                return super.onJsBeforeUnload(view, url, message, result);
            }


            /*允许显示js确认对话框*/
            @Override
            public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
                return super.onJsConfirm(view, url, message, result);
            }

            /*允许显示js提示对话框*/
            @Override
            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }


            /*网页的加载进度*/
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
              L.i("加载进度"+newProgress+"%");
            }

            /*网页title变化时调用*/

            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);

                L.i("标题发生变化了"+title);
                toolbar.setTitle(title);
            }


        });

webview demo

©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值