
解决Android中WebView跳转到浏览器的问题
发布日期:2021-05-07 18:53:38
浏览次数:13
分类:技术文章
本文共 4025 字,大约阅读时间需要 13 分钟。
用到了腾讯x5的webview 当然原生的也可以
//腾讯x5 implementation 'com.tencent.tbs.tbssdk:sdk:43939'
MyApplication->onCreate
新增 我的是kt语法,,具体就是创建map添加进去
// 在调用TBS初始化、创建WebView之前进行如下配置 // 在调用TBS初始化、创建WebView之前进行如下配置 val map = mapOf(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER to true,TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE to true) QbSdk.initTbsSettings(map)
自定义webview
package com.anguomob.video.viewimport android.annotation.SuppressLintimport android.content.Contextimport android.util.AttributeSetimport com.tencent.smtt.sdk.WebSettingsimport com.tencent.smtt.sdk.WebViewimport com.tencent.smtt.sdk.WebViewClientclass X5WebView @SuppressLint("SetJavaScriptEnabled") constructor( arg0: Context?, arg1: AttributeSet?) : WebView(arg0, arg1) { private val client: WebViewClient = object : WebViewClient() { /** * 防止加载网页时调起系统浏览器 */ override fun shouldOverrideUrlLoading(view: WebView, url: String?): Boolean { view.loadUrl(url) return true } } private fun initWebViewSettings() { val webSetting: WebSettings = this.getSettings() webSetting.setJavaScriptEnabled(true) webSetting.setJavaScriptCanOpenWindowsAutomatically(true) webSetting.setAllowFileAccess(true) webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS) webSetting.setSupportZoom(true) webSetting.setBuiltInZoomControls(true) webSetting.setUseWideViewPort(true) webSetting.setSupportMultipleWindows(true) // webSetting.setLoadWithOverviewMode(true); webSetting.setAppCacheEnabled(true) // webSetting.setDatabaseEnabled(true); webSetting.setDomStorageEnabled(true) webSetting.setGeolocationEnabled(true) webSetting.setAppCacheMaxSize(Long.MAX_VALUE) // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY); webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND) // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH); webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE) // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension // settings 的设计 } init { this.setWebViewClient(client) // this.setWebChromeClient(chromeClient); // WebStorage webStorage = WebStorage.getInstance(); initWebViewSettings() this.getView().setClickable(true) }}
总结
核心是因为下面的client没有设置 所以才跳转到 了系统默认浏览器 可以直接用webweb.setVewViewClient去设置一下就可以了
private val client: WebViewClient = object : WebViewClient() { /** * 防止加载网页时调起系统浏览器 */ override fun shouldOverrideUrlLoading(view: WebView, url: String?): Boolean { view.loadUrl(url) return true } }
this.setWebViewClient(client)
使用
package com.anguomob.video.activityimport android.os.Bundleimport android.view.KeyEventimport android.view.Viewimport androidx.appcompat.widget.Toolbarimport com.anguomob.video.Rimport com.tencent.smtt.sdk.WebSettingsimport com.tencent.smtt.sdk.WebViewimport com.tencent.smtt.sdk.WebViewClientimport com.yilan.sdk.common.ui.BaseActivity/** * Create by: liuan * Create date: 2020-10-19 0019 * Describe: */class WebViewX5Acitivity : BaseActivity() { lateinit var mWebView: WebView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_x5_webview) mWebView = findViewById(R.id.forum_context); mWebView.loadUrl("https://www.anguomob.com") } // 5、覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { return if (keyCode == KeyEvent.KEYCODE_BACK) { if (mWebView.canGoBack()) { mWebView.goBack() //goBack()表示返回WebView的上一页面 true } else { finish() true } } else false }}
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月29日 09时27分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(三)
2019-03-04
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象语义
2019-03-04
基于FPGA的HDMI信号采样原理
2019-03-04
Spring 与使用STOMP消息
2019-03-04
Linux 查看系统语言
2019-03-04
十 一、C语言创建桌面程序:单选按钮、复选框和分组框控件
2019-03-04
Java Swing JList:列表框组件
2019-03-04
AngularJS $q
2019-03-04
jQuery中的动画
2019-03-04
Linux host命令
2019-03-04
MongoDB 查询分析
2019-03-04
C++ 模板(泛型)编程
2019-03-04
编写Makefile.am
2019-03-04
shell编程学习
2019-03-04
狂神说MySQL01:初识MySQL
2019-03-04
5.3.2 等待一段时间:编写延时循环
2019-03-04
1.2.3 项目、项目集、项目组合以及运营管理之间的关系
2019-03-04
光环和你一起迎接改版
2019-03-04
1.12 项目和运营的区别
2019-03-04