Android中使用WebView遇到的问题总结:

1:直接在xml中给webview设置了背景图片,背景图片不生效的问题 解决方法:在xml中给webview设置背景图片,而后在代码中增长:webView.setBackgroundColor(0);web

2:点击h5中的按钮时,经过scheme跳转到Android原生界面 a:具体的操做流程能够参考我朋友的文章:blog.csdn.net/m0_37700275…bash

b:问题一:7.0/8.0手机h5端的scheme和我这边的scheme彻底同样,可是点击按钮不能跳转成功 缘由:我在代码中调用了如下代码:ide

mWbAllFenqu.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageFinished(WebView view, String url)
            {
                super.onPageFinished(view, url);
                LogUtils.i("onPageFinished");
                dialogDismiss();
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon)
            {
                super.onPageStarted(view, url, favicon);
                LogUtils.i("onPageStarted");
                dialogShow();
            }
        });
复制代码
解释:咱们是彻底经过h5端控制跳转的,也就是说在Android端是不写跳转事件的,因此我在setWebViewClient()
的时候,并无重写shouldOverrideUrlLoading()方法,也没有在shouldOverrideUrlLoading()方法中根据点击
h5按钮时的url进行页面跳转,而我之因此调用setWebViewClient()方法时想在h5页面开始加载时弹出加载框,在h5页面加载完成后加载框消失。
若是想要在setWebViewClient()中控制页面跳转,能够这样写:
复制代码
mWbAllFenqu.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageFinished(WebView view, String url)
            {
                super.onPageFinished(view, url);
                LogUtils.i("onPageFinished");
                dialogDismiss();
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon)
            {
                super.onPageStarted(view, url, favicon);
                LogUtils.i("onPageStarted");
                dialogShow();
            }
                    @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                LogUtils.i("shouldOverrideUrlLoading");
                LogUtils.i("request.toString():"+request.getUrl().toString());
                Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                startActivity(intent);
                return true;
            }
        });
复制代码
若是和我同样,在Android端只定义scheme,由h5端彻底调用,而又想在页面加载过程当中有加载框出现,页面加载完成后
加载框消失,能够不调用setWebViewClient()方法,改为:
复制代码
dialogShow();
        webView.loadUrl(url);
        mWbAllFenqu.setWebChromeClient(new WebChromeClient()
        {
            public void onProgressChanged(WebView view, int progress)
            {
                //当进度走到100的时候作本身的操做
                if(progress == 100){
                    dialogDismiss();
                }
            }
        });
复制代码

c:问题二:代码不走shouldOverrideUrlLoading()方法 在重写shouldOverrideUrlLoading()方法时,我遇到了问题二,就是我点击h5中的按钮时并不走shouldOverrideUrlLoading()方法, 这让我无比郁闷,后来尝试着把webView.loadUrl(url)放到setWebViewClient()方法的后面,居然神奇的成功了,可是有些其余型号的手机 这样作仍是不走shouldOverrideUrlLoading()方法ui

d:问题三:适配5.0/6.0手机 当我在公司的7.0/8.0手机上完成页面显示和页面跳转的功能后,我给本身的6.0手机装了一个APK,发现6.0中h5页面中的全部按钮 都挤到了左上角,因而又给5.0手机装了一个,也是同样的问题,后来通过不断调试,发现缘由是:ES6的版本太高,将ES6改为ES5就没问题了。url

e:问题四:5.0手机的页面跳转问题 当5.0/6.0手机的页面没问题以后,6.0能够经过scheme由h5端跳转到Android原生页面, 可是5.0直接报错:TOPICID://aa.diqu:8888/test处的网页不能载入为:net::ERR_UNKOWN_URL_SCHEMW, 因而改为使用setWebViewClient(),重写shouldOverrideUrlLoading()方法跳转,发现5.0的手机不走shouldOverrideUrlLoading()方法, 因而改为如下方法:spa

mWbAllFenqu.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                LogUtils.i("onReceivedTitle");
                LogUtils.i("view.getUrl():"+view.getUrl());
                String url = view.getUrl();
                if (url.startsWith("topicid")) //只有是跳转到地区界面的时候,才进行跳转处理
                {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                }
            }
            public void onProgressChanged(WebView view, int progress)
            {
                //当进度走到100的时候作本身的操做
                if(progress == 100){
                    dialogDismiss();
                }
            }
        });
复制代码

总结:若是使用scheme从h5端跳转到Android原生界面,建议使用setWebChromeClient()方法,百分百没问题.net

相关文章
相关标签/搜索