如下都是常用配置。直接粘贴即可
val webClient = object : WebViewClient() {
override fun onLoadResource(view: WebView?, url: String?) {
if (url != null && url.toString().contains("&vcode=")) {
isRefresh = true
}
super.onLoadResource(view, url)
}
}
// /cert?developerId=1615176488011876609
vBinding.wvSign.webViewClient = webClient
val webSettings = vBinding.wvSign.settings
webSettings.javaScriptEnabled = true // 开启 JavaScript 交互
webSettings.setAppCacheEnabled(true) // 启用或禁用缓存
webSettings.cacheMode = WebSettings.LOAD_DEFAULT // 只要缓存可用就加载缓存, 哪怕已经过期失效 如果缓存不可用就从网络上加载数据
webSettings.setAppCachePath(cacheDir.path) // 设置应用缓存路径
webSettings.blockNetworkImage = false //解决图片不显示
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
}
// 缩放操作
webSettings.setSupportZoom(true) // 支持缩放 默认为true 是下面那个的前提
webSettings.builtInZoomControls = true // 设置内置的缩放控件 若为false 则该WebView不可缩放
webSettings.displayZoomControls = true // 隐藏原生的缩放控件
webSettings.blockNetworkImage = false // 禁止或允许WebView从网络上加载图片
webSettings.loadsImagesAutomatically = true // 支持自动加载图片
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
webSettings.safeBrowsingEnabled = true // 是否开启安全模式
}
webSettings.javaScriptCanOpenWindowsAutomatically = true // 支持通过JS打开新窗口
webSettings.domStorageEnabled = true // 启用或禁用DOM缓存
webSettings.setSupportMultipleWindows(true) // 设置WebView是否支持多窗口
// 设置自适应屏幕, 两者合用
webSettings.useWideViewPort = true // 将图片调整到适合webview的大小
webSettings.loadWithOverviewMode = true // 缩放至屏幕的大小
webSettings.allowFileAccess = true // 设置可以访问文件
webSettings.setGeolocationEnabled(true) // 是否使用地理位置
vBinding.wvSign.fitsSystemWindows = true
vBinding.wvSign.setLayerType(View.LAYER_TYPE_HARDWARE, null)
vBinding.wvSign.loadUrl(signUrl)
//监听返回按钮
webView.setOnKeyListener {
view, keyCode, keyEvent ->
if (keyEvent.action == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK && vBinding.wvSign.canGoBack()) {
vBinding.wvSign.goBack()
return@setOnKeyListener true
}
}
return@setOnKeyListener false
}