Android中的WebView的使用

前言

  WebView在Android中的使用频率还挺高的,经常用来加载一个html网页,使用webview来和js互动可以大大的增加开发我们的效率。不过这个控件在使用的过程还需要注意一些问题,以下是本鸟的使用经历,哪里有说的不对,请路过的大佬不吝赐教。菜鸟在此先行谢过了。

权限

  加载网络中的链接肯定得需要联网权限咯,在你的AndroidManifest中添加下面的权限:

定义

  我使用webview的时候,直接就在布局文件中定义了,只是简单的定义了一个没有滚动条铺满整个空间的webview


    

java代码中使用

  要想使用布局中定义的控件,findViewById是少不了的,然后就是webview的一些常用配置:

webView = findViewById(R.id.common_webview);
WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);//支持js交互,可以点击网页中按钮链接
        settings.setJavaScriptCanOpenWindowsAutomatically(true);//支持js可以打开新的页面
        settings.setSupportZoom(true);//是否可以缩放,默认true
        settings.setBuiltInZoomControls(true);//是否显示缩放按钮,默认false
        settings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式
        settings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
        settings.setAppCacheEnabled(false);//是否使用缓存
        settings.setDomStorageEnabled(true);//DOM Storage

写了这么多的配置重点中的重点!!!!loadUrl这个方法一定别忘记调用了[笑哭],因为这让你的webview显示的内容。这应该就正常加载你的网页了,不过这样默认打开你手机自带的浏览器。不过这种用户体验感极差,所以我们用以下方法来解决这个问题

webView.setWebViewClient(new WebViewClient() {
            //覆盖shouldOverrideUrlLoading 方法
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //默认是打开系统自带的浏览器,重写这个方法之后就不会打开系统的浏览器了
                view.loadUrl(url);
                return true;
            }
            
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();//解决webview 加载https 出现没内容
            }
        });

重写第一个方法之后,就不会打开系统的浏览器了,这时你会看见重写第二个方法,因为webview加载的链接可能是http或者是https,这两个的区别就是后者有点严重坑爹。。。,之前一直是加载的http,没有啥问题,昨天没注意后台给的html,加载就是出现白板没内容,搞了半天才看到是https。。。,网搜了一圈,大致是因为默认会查看证书的安全,重写那个方法之后就会忽略这个问题了。

后退问题

  你的界面可会是上面标题栏,标题栏左侧还会有一个返回键,下面是一个webview,如果你点击html里面的链接内容,加载出新的页面,你点击返回键就直接finish掉这个fragment或者activity,这个时候你会突然想到,安卓还带一个back键呢!!!天空飘来五个字,这都不是事,上代码解决问题

ivBack.setOnClickListener(new View.OnClickListener() {//标题栏返回键
            @Override
            public void onClick(View view) {
                if (webView.canGoBack()){
                    webView.goBack();
                }else {
                    finish();
                }
            }
        });

@Override
    public void onBackPressed() {//手机物理返回键
        if (weekView.canGoBack()){
            weekView.goBack();
        }else {
            finish();
        }
    }

结束语

  这就是一些常用的webview设置,本鸟经历的webview不多,后续会更新这篇文章,如果哪里有什么不对的地方还请大家指教,互相学习嘛,嘿嘿嘿。。。


你可能感兴趣的:(控件,android)