android WebView 的基础使用

大佬全面讲解

准备工作: 在布局中添加WebView ;在类中绑定WebView;

WebView加载页面:

 webView.loadUrl("https://www.baidu.com/");//加载百度

判断webview是否加载完成:

 webview.setWebChromeClient(new WebChromeClient()
                                    {
                                        public void onProgressChanged(WebView view, int progress)
                                        {
                                            if(progress == 100){
                                             //progress到一百后就是加载完成,在里边写你要调用的方法就行了
                                            }
                                        }
                                    }

如果不想跳转浏览器加载网页: 就加上以下代码,想跳转就不设置以下代码

 //如果不设置WebViewClient,请求会跳转系统浏览器
        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //该方法在Build.VERSION_CODES.LOLLIPOP以前有效,从Build.VERSION_CODES.LOLLIPOP起,建议使用shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead
                //返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
                //返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下,我想让webView加载http://ask.csdn.net/questions/178242
                return false;
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
            {
                //返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
                //返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下,我想让webView加载http://ask.csdn.net/questions/178242
                return false;
            }

        });

WebView基本设置(更多设置请自行搜索):

 WebSettings webSettings = webView.getSettings();//获得websetting
 webSettings.setJavaScriptEnabled(true);//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
 
 //设置自适应屏幕,两者合用
 webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
 
 webSettings.setCacheMode(WebSettings. LOAD_DEFAULT);//默认加载方式
 webSettings.setAllowFileAccess(true); //设置可以访问文件
 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
 webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
 webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

WebSettings.CacheMode总够有5个选项

  • LOAD_DEFAULT: * 默认加载方式,使用这种方式,会实现快速前进后退,在同一个标签打开几个网页后,关闭网络时,可以通过前进后退来切换已经访问过的数据,同时新建网页需要网络
  • LOAD_NO_CACHE
  • LOAD_NORMAL
    • 这个方式跟LOAD_NO_CACHE方式相同,不使用缓存,如果没有网络,即使以前打开过此网页也不会使用以前的网页。
  • LOAD_CACHE_ELSE_NETWORK
    • 这个方式不论如何都会从缓存中加载,除非缓存中的网页过期,出现的问题就是打开动态网页时,不能时时更新,会出现上次打开过的状态,除非清除缓存。
  • LOAD_CACHE_ONLY
    • 这个方式只是会使用缓存中的数据,不会使用网络。
      影响缓存模式的两个http头是If-None-Match和If-Modified-Since,遇到这两个http头,浏览器会把缓存模式改为LOAD_NO_CACHE方式。

JS调用android:

 //js调用android
        webView.addJavascriptInterface(new JsJavaBridge(), "android");//  一参:js调用的android的方法的存放类  二参:js调用android的方法的引用名
 /**
     * js调用android的方法的存放类
     */
    class JsJavaBridge {
    //没有返回值
        @JavascriptInterface  //必须加上不然js无法调用
        public void onFinishActivity() {
         finish();
        }
        //       有 返回值和参数
        @JavascriptInterface
        public String muserName(String data) {
        //需要把data转为jsonobject(js不能直接传对象过来)
            return userName;
        }

}

js调用代码:
//接收调用方法的返回值和参数
str=android.muserName(data);
//调用方法无返回值
android.onFinishActivity();

@JavascriptInterface 必须加上不然js无法调用

android调用js:

//带参数
 webView.post(new Runnable() {
                                @Override
                                public void run() {
                                    String fileName=file.getName();
                                    long fileSize=file.length();
                                    webView.loadUrl("javascript: getFilePath('"+filePath+"','"+fileName+"','"+fileSize+"')");     // getFilePath()是js的被调用方法名
                                }
                            });
 //不带参数
  webView.post(new Runnable() {
                                @Override
                                public void run() {
                                    webView.loadUrl("javascript: getFilePath()");   // getFilePath()是js的被调用方法名
                                }
                            });


js方法代码:
window['getFilePath']=(filePath,fileName,fileSize)=>{
           js自己的逻辑
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值