zoukankan      html  css  js  c++  java
  • WebView解析

    WebView解析

     


    WebView是一个基于Webkit的,相当于内置浏览器的强大功能的组件,WebView的使用这么分四步说明:添加组件,加载资源,属性设置,辅助功能。

    一、WebView的添加同绝大多数控件一样,主要有两种添加方式:第一,类似于普通控件的定义,先在xml文件里添加webview控件,再通过findViewById()获得;第二种方式如下:

    WebView  webView = new WebView(this);

    setContentView(webView);


    二、WebView资源的加载主要有两种

    网页的加载:webView,loadUrl("http://www.hzeduask.com");    //这里是全部域名

    本地文件的加载:webView.loadUrl("file:///android_asset/aaa.html"); 文件放在目录下assets文件夹下,也可以加载sd卡本地html文件(file://不能少)


    三、WebView属性设置

        

                    // 访问页面中有JavaScript,必须设置支持JavaScript

       webView.getSettings().setJavaScriptEnabled(true);

       // 启用WebView访问文件数据

       webView.getSettings().setAllowFileAccess(true);

       // 设置支持缩放

       webView.getSettings().setSupportZoom(true);

       webView.getSettings().setBuiltInZoomControls(true);

       // 设置缩放比例

       webView.setInitialScale(35);

       // 设置是否显示网络图像---true,封锁网络图片,不显示     false----允许显示网络图片

       webView.getSettings().setBlockNetworkImage(false);

       // 设置支持插件

       webView.getSettings().setPluginsEnabled(true);

       // 将图片调整到适合WebView大小

       webView.getSettings().setUseWideViewPort(true);

       // 支持多窗口

       webView.getSettings().supportMultipleWindows();

       // 设置自动加载图片

       webView.getSettings().setLoadsImagesAutomatically(true);

       // 设置渲染优先级

       webView.getSettings().setRenderPriority(RenderPriority.HIGH);

       // 设置默认字体大小

       webView.getSettings().setDefaultFontSize(50);

       // 如果需要用户输入账号密码,必须设置支持手势焦点

       webView.requestFocusFromTouch();

       // 取消滚动条

       webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);     


        WebView缓存设置 setCacheMode()设置缓存模式,参数

        WebSettings.LOAD_CACHE_ELSE_NETWORK---只要本地有,无论是否过期,都使用缓存数据;只要打开过一次就使用缓存数据

        WebSettings.LOAD_CACHE_ONLY---只使用缓存

        WebSettings。LOAD_NO_CACHE---不使用缓存

        WebSettings.LOAD_DEFAULT---控制器决定是否从网络获取数据,无论如果都从网络获取数据,没有网络就报错

        WebSettings.LOAD_NORMAL---同默认

       // 设置缓存模式

       webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

       // 启用缓存

       webView.getSettings().setAppCacheEnabled(true);

       // 设置最大缓存容量---100M

       webView.getSettings().setAppCacheMaxSize(1024 * 1024 * 100);


    四、辅助方法的添加

             1、WebViewClient主要为WebView处理各种通知、请求事件。setWebViewClient()该方法作用于点击链接时调用,点击跳转时,加载新的webview资源,并可以在加载前后添加操作,比如添加缓冲对话             框,该方法的作用使得点击链接的响应在WebView内执行,而不是手机浏览器。

                  webView.setWebViewClient(new WebViewClient() {

                                 //用于加载新WebView,返回true代表着用完就消费掉

        @Override

        public boolean shouldOverrideUrlLoading(WebView view, String url) {

         view.loadUrl(url);

         return true;

        }

                              //用于加载新Webview之前,一般在此加载缓冲区

        @Override

        public void onPageStarted(WebView view, String url, Bitmap favicon) {

         super.onPageStarted(view, url, favicon);


         showDialog(1);

        }

                               //用于加载新Webview之后,一般在此消除缓冲区

       @Override

        public void onPageFinished(WebView view, String url) {

         super.onPageFinished(view, url);


         removeDialog(1);

        }

                              //加载错误时调用,一般提示错误信息

        @Override

        public void onReceivedError(WebView view, int errorCode,

          String description, String failingUrl) {

         super.onReceivedError(view, errorCode, description, failingUrl);


         Toast.makeText(WebViewDemo.this, "页面加载错误...",

           Toast.LENGTH_SHORT).show();

        }


       });

            2.WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等

               webView.setWebChromeClient(new WebChromeClient(){

       

                         //打开新WebView时,设置加载进度,进度显示于最上方标题位置  

        @Override

        public void onProgressChanged(WebView view, int newProgress) {

         super.onProgressChanged(view, newProgress);

         WebViewDemo.this.setProgress(newProgress*100);

        }

        //设置新WebView的标题,显示于最上方标题位置

        @Override

        public void onReceivedTitle(WebView view, String title) {

         super.onReceivedTitle(view, title);

         WebViewDemo.this.setTitle(title);

        }

        //创建新WebView,加载新资源,并设置

        @Override

        public boolean onCreateWindow(WebView view, boolean isDialog,

          boolean isUserGesture, Message resultMsg) {

         WebView child=new WebView(WebViewDemo.this);

         child.getSettings().setJavaScriptEnabled(true);

         child.getSettings().setAllowFileAccess(true);

         child.getSettings().setSupportZoom(true);

         child.getSettings().setBuiltInZoomControls(true);

         child.setInitialScale(35);

         child.getSettings().setBlockNetworkImage(true);

         child.getSettings().setPluginsEnabled(true);

         child.getSettings().setUseWideViewPort(true);

         child.getSettings().supportMultipleWindows();

         child.getSettings().setLoadsImagesAutomatically(true);

         child.getSettings().setLoadWithOverviewMode(true);

         //通过WebViewTransport设置新WebView

         child.setWebChromeClient(this);

         WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;

         transport.setWebView(child);

         resultMsg.sendToTarget();

         return true;

        }

       

       });


    五、注意事项

    1、WebView的使用需要添加网络权限

            <uses-permission android:name="android.permission.INTERNET"/>    

    2、WebView的返回需要重写Activity的onKeyDown方法,使得回退返回至上一级,如果不重写,将会    完全退出,代码如下:

            @Override

      public boolean onKeyDown(int keyCode, KeyEvent event) {
       if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {

        webView.goBack();

        return true;

       }

       return super.onKeyDown(keyCode, event);

      } 

  • 相关阅读:
    Pytorch手写线性回归
    numpy+sklearn 手动实现逻辑回归【Python】
    如何用TensorFlow实现线性回归
    进程、线程和携程的通俗解释【刘新宇Python】
    即时通信WebSocket 和Socket.IO
    gRPC【RPC自定义http2.0协议传输】
    Django中MySQL事务的使用
    模拟电磁曲射炮_H题 方案分析【2019年电赛】【刘新宇qq522414928】
    Gitflow工作流
    雪花算法【分布式ID问题】【刘新宇】
  • 原文地址:https://www.cnblogs.com/marsli/p/3711631.html
Copyright © 2011-2022 走看看