android WebView问题及解决方案合集

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qugengting/article/details/84770831

基本设置:

    protected void initWebView() {
        webView.getSettings().setJavaScriptEnabled(true);
//        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        //优先使用网络
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        //将图片调整到适合webview的大小
        webView.getSettings().setUseWideViewPort(true);
        //支持内容重新布局
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        //支持自动加载图片
        webView.getSettings().setLoadsImagesAutomatically(true);
        //当webview调用requestFocus时为webview设置节点
        webView.getSettings().setNeedInitialFocus(true);
        //自适应屏幕
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        //开启DOM storage API功能(HTML5 提供的一种标准的接口,主要将键值对存储在本地,在页面加载完毕后可以通过 javascript 来操作这些数据。)
        webView.getSettings().setDomStorageEnabled(true);
        //支持缩放
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setSupportZoom(true);

        //允许webview对文件的操作
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setAllowFileAccessFromFileURLs(true);
        webView.getSettings().setAllowUniversalAccessFromFileURLs(true);

        webView.requestFocusFromTouch();
    }

设置返回键效果:

        webView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { // 表示按返回键时的操作
                        webView.goBack(); // 后退
                        // webview.goForward();//前进
                        return true; // 已处理
                    }
                }
                return false;
            }
        });

跳转会弹出浏览器APP选择框:

解决方法:添加setWebViewClient监听事件:

        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                webView.loadUrl(url);
                return true;
            }

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

        });

猜你喜欢

转载自blog.csdn.net/qugengting/article/details/84770831