package com.yidianling.common.tools;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
/**
* Created by Vondear on 2017/4/1.
*/
public class RxWebViewTool {
public static void initWebView(final Context context, final WebView webBase) {
WebSettings webSettings = webBase.getSettings();
if (Build.VERSION.SDK_INT >= 19) {
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//加载缓存否则网络
}
if (Build.VERSION.SDK_INT >= 19) {
webSettings.setLoadsImagesAutomatically(true);//图片自动缩放 打开
} else {
webSettings.setLoadsImagesAutomatically(false);//图片自动缩放 关闭
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
webBase.setLayerType(View.LAYER_TYPE_SOFTWARE, null);//软件解码
}
webBase.setLayerType(View.LAYER_TYPE_HARDWARE, null);//硬件解码
// webSettings.setAllowContentAccess(true);
// webSettings.setAllowFileAccessFromFileURLs(true);
// webSettings.setAppCacheEnabled(true);
/* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}*/
// setMediaPlaybackRequiresUserGesture(boolean require) //是否需要用户手势来播放Media,默认true
webSettings.setJavaScriptEnabled(true); // 设置支持javascript脚本
// webSettings.setPluginState(WebSettings.PluginState.ON);
webSettings.setSupportZoom(true);// 设置可以支持缩放
webSettings.setBuiltInZoomControls(true);// 设置出现缩放工具 是否使用WebView内置的缩放组件,由浮动在窗口上的缩放控制和手势缩放控制组成,默认false
webSettings.setDisplayZoomControls(false);//隐藏缩放工具
webSettings.setUseWideViewPort(true);// 扩大比例的缩放
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕
webSettings.setLoadWithOverviewMode(true);
webSettings.setDatabaseEnabled(true);//
webSettings.setSavePassword(true);//保存密码
webSettings.setDomStorageEnabled(true);//是否开启本地DOM存储 鉴于它的安全特性(任何人都能读取到它,尽管有相应的限制,将敏感数据存储在这里依然不是明智之举),Android 默认是关闭该功能的。
webBase.setSaveEnabled(true);
webBase.setKeepScreenOn(true);
//设置此方法可在WebView中打开链接,反之用浏览器打开
webBase.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!webBase.getSettings().getLoadsImagesAutomatically()) {
webBase.getSettings().setLoadsImagesAutomatically(true);
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("http:") || url.startsWith("https:")) {
view.loadUrl(url);
return false;
}
// Otherwise allow the OS to handle things like tel, mailto, etc.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(intent);
return true;
}
});
webBase.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String paramAnonymousString1, String paramAnonymousString2, String paramAnonymousString3, String paramAnonymousString4, long paramAnonymousLong) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.setData(Uri.parse(paramAnonymousString1));
context.startActivity(intent);
}
});
}
public static void loadData(WebView webView, String content) {
webView.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null);//这种写法可以正确解码
}
}