X5WebviewUtils.java 3.46 KB
package com.polysoft.nafmii.webview;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.view.View;
import android.view.ViewGroup;

import com.polysoft.nafmii.BuildConfig;
import com.tencent.smtt.export.external.extension.interfaces.IX5WebSettingsExtension;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;


public class X5WebviewUtils {


    public static WebView create(Context context) {
        WebView webView = new WebView(context);
        /** 设置透明色背景*/
        webView.setBackgroundColor(0);
        // 解决部分机型加载 背景为黑色问题
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
//        webView.clearCache(true);
        webView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG);
        setWebView(webView);
        return webView;
    }

    public static void destroy(WebView webView) {
        if (null == webView) {
            return;
        }
        webView.stopLoading();
        webView.clearHistory();
        webView.removeAllViews();
        webView.setVisibility(View.GONE);
        webView.loadUrl("about:blank");
        webView.destroy();
        ViewGroup parent = (ViewGroup) webView.getParent();
        parent.removeAllViews();
    }

    @SuppressLint({"SetJavaScriptEnabled", "InlinedApi"})
    private static void setWebView(WebView webView) {
        WebSettings settings = webView.getSettings();
        /** 支持javaScript*/
        settings.setJavaScriptEnabled(true);
        /** 设置页面文字的编码*/
        settings.setDefaultTextEncodingName("utf-8");
        /** 设置webview布局方式*/
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
        /** 是否允许WebView度超出以概览的方式载入页面,默认false。
         *  即缩小内容以适应屏幕宽度。该项设置在内容宽度超出WebView控件的宽度时生效,
         *  例如当getUseWideViewPort() 返回true时*/
        settings.setLoadWithOverviewMode(true);
        settings.setUseWideViewPort(true);
        /** 支持访问Content Provider的资源*/
        settings.setAllowContentAccess(true);
        /** 支持访问本地文件*/
        settings.setAllowFileAccess(true);
        /** 支持通过file url加载的Javascript读取本地文件*/
        settings.setAllowFileAccessFromFileURLs(true);
        /** 支持https/http 混合加载*/
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//            settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        /** 支持通过file url加载的Javascript读取全部资源(包括文件,http,https)*/
        settings.setAllowUniversalAccessFromFileURLs(true);
        /** 禁止页面缩放*/
        settings.setBuiltInZoomControls(false);
        settings.setSupportZoom(false);
        /** 禁止显示缩放图标*/
        settings.setDisplayZoomControls(false);

//        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//        settings.setAppCacheEnabled(true);
        settings.setDomStorageEnabled(true);

        IX5WebSettingsExtension extension = webView.getSettingsExtension();
        if (null != extension) {
            /** 对于刘海屏机器如果webview被遮挡会自动padding */
            extension.setDisplayCutoutEnable(true);
            /** 正常加载显示所有图片 */
            extension.setPicModel(IX5WebSettingsExtension.PicModel_NORMAL);
        }

    }

}