腾讯TBS X5 WebView的简单使用

工作中经常涉及H5网页的加载工作,最多使用的就是安卓系统控件WebView,但是当网页内容比较多的时候,需要等待很久才能加载完,加载完后用户才能看到网页中的内容,这样用户需要等很久,体验很差。

那能不能边加载边显示呢,通过搜索发现腾讯X5WebView可以实现,相对体验要好很多,况且手Q、微信、QQ浏览器使用的该插件,故值得一试。

步骤如下:

一、下载jar包及so文件分别放到libs和jniLibs文件夹

二、添加权限

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /
2 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
4 <uses-permission android:name="android.permission.INTERNET" />
5 <uses-permission android:name="android.permission.READ_PHONE_STATE" />

三、Application中初始化

 1     private void initX5WebView() {
 2         //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
 3         QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
 4             @Override
 5             public void onViewInitFinished(boolean arg0) {
 6                 //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
 7                 Log.d("app", " onViewInitFinished is "   arg0);
 8             }
 9  
10             @Override
11             public void onCoreInitFinished() {
12             }
13         };
14         //x5内核初始化接口
15         QbSdk.initX5Environment(getApplicationContext(), cb);
16     }

四、使用自定义X5WebView继承腾讯包下WebView

 1 import android.annotation.SuppressLint;
 2 import android.content.Context;
 3 import android.util.AttributeSet;
 4  
 5 import com.tencent.smtt.sdk.WebSettings;
 6 import com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm;
 7 import com.tencent.smtt.sdk.WebView;
 8 import com.tencent.smtt.sdk.WebViewClient;
 9  
10 public class X5WebView extends WebView {
11  
12     private WebViewClient client = new WebViewClient() {
13         /**
14          * 防止加载网页时调起系统浏览器
15          */
16         public boolean shouldOverrideUrlLoading(WebView view, String url) {
17             view.loadUrl(url);
18             return true;
19         }
20     };
21  
22     @SuppressLint("SetJavaScriptEnabled")
23     public X5WebView(Context arg0, AttributeSet arg1) {
24         super(arg0, arg1);
25         this.setWebViewClient(client);
26         // this.setWebChromeClient(chromeClient);
27         // WebStorage webStorage = WebStorage.getInstance();
28         initWebViewSettings();
29         this.getView().setClickable(true);
30     }
31  
32     private void initWebViewSettings() {
33         WebSettings webSetting = this.getSettings();
34         webSetting.setJavaScriptEnabled(true);
35         webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
36         webSetting.setAllowFileAccess(true);
37         webSetting.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
38         webSetting.setSupportZoom(true);
39         webSetting.setBuiltInZoomControls(true);
40         webSetting.setUseWideViewPort(true);
41         webSetting.setSupportMultipleWindows(true);
42         // webSetting.setLoadWithOverviewMode(true);
43         webSetting.setAppCacheEnabled(true);
44         // webSetting.setDatabaseEnabled(true);
45         webSetting.setDomStorageEnabled(true);
46         webSetting.setGeolocationEnabled(true);
47         webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
48         // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
49         webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
50         // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
51         webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
52  
53         // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension
54         // settings 的设计
55     }
56  
57     public X5WebView(Context arg0) {
58         super(arg0);
59         setBackgroundColor(85621);
60     }
61  
62 }

五、Activity中使用

 1 /**
 2  * @author geqipeng
 3  * @date 2018/1/18
 4  */
 5  
 6 public class WebViewTestActivity extends Activity {
 7  
 8     private static final String mHomeUrl = "http://app.html5.qq.com/navi/index";
 9     private X5WebView mX5WebView;
10  
11     @Override
12     protected void onCreate(@Nullable Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_webview_test);
15         initHardwareAccelerate();
16         initView();
17     }
18  
19     /**
20      * 启用硬件加速
21      */
22     private void initHardwareAccelerate() {
23         try {
24             if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 11) {
25                 getWindow()
26                         .setFlags(
27                                 android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
28                                 android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
29             }
30         } catch (Exception e) {
31         }
32     }
33     
34     private void initView() {
35         mX5WebView = findViewById(R.id.x5_webview);
36         mX5WebView.loadUrl(mHomeUrl);
37     }
38  
39     /**
40      * 返回键监听
41      * @param keyCode
42      * @param event
43      * @return
44      */
45     @Override
46     public boolean onKeyDown(int keyCode, KeyEvent event) {
47         if (keyCode == KeyEvent.KEYCODE_BACK) {
48             if (mX5WebView != null && mX5WebView.canGoBack()) {
49                 mX5WebView.goBack();
50                 return true;
51             } else {
52                 return super.onKeyDown(keyCode, event);
53             }
54         }
55         return super.onKeyDown(keyCode, event);
56     }
57  
58    
59     @Override
60     protected void onDestroy() {
61         //释放资源
62         if (mX5WebView != null)
63             mX5WebView.destroy();
64         super.onDestroy();
65     }
66 }

六、Xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><net.edaibu.testapplication.activity.webview.X5WebViewandroid:id="@ id/x5_webview"android:layout_width="match_parent"android:layout_height="match_parent"/></RelativeLayout>

效果图:


腾讯X5WebView接入文档

https://x5.tencent.com/tbs/guide/sdkInit.html点击打开链接

 


更多专业前端知识,请上 【猿2048】www.mk2048.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

针对新手的Java EE7和Maven项目–第5部分–使用Arquillian / Wildfly 8进行单元测试

从前面的部分恢复 第1 部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分 &#xff0c; 第4部分 &#xff0c; 这是第一篇“额外”的帖子&#xff0c;基于我正在此系列博客文章上“构建”的Maven JavaEE7演示项目。 我们已经定义了一个坚实的结构和一些模块。 在这样的应用程…

C/S,B/S的区别与联系

C/S 是Client/Server 的缩写。服务器通常采用高性能的PC、工作站或小型机&#xff0c;并采用 大型数据库系统&#xff0c;如Oracle、Sybase、Informix 或SQL Server。客户端需要安装专用的客户 端软件。 B/&#xff33;是Brower/Server 的缩写&#xff0c;客户机上只要安装一个…

五年级下册电子计算机与多媒体,语文人教版五年级下册《电子计算机与多媒体》.doc...

《电子计算机与多媒体》教学设计沈彦坤 石家庄市鹿泉区石井乡封庄小学?一、概述??语文&#xff0c;五年级五年级下册&#xff0c;第一课时熟悉课文内容,学会生字,理解新词意思&#xff0c;学习课文1-3段。了解计算机的产生与发展&#xff0c;了解什么是多媒体,计算机与多媒体…

Airflow安装与使用

# Airflow 1.10安装本次安装Airflow版本为1.10&#xff0c;其需要依赖Python和DB&#xff0c;本次选择的DB为Mysql。本次安装组件及版本如下&#xff1a;Airflow 1.10.0Python 3.6.5Mysql 5.7# 整体流程1. 建表2. 安装3. 配置4. 运行5. 配置任务启动scheduleairflow schedul…

Wordpress安装

Wordpress是一种用PHP语言和MySQL的数据库的开源的免费Blog引擎&#xff0c;用户可以在支持PHP和MySQL数据库的服务器上建立自己的Blog,它具有非常强大的功能和成千上万的插件和模板主题。安装步骤如下(本文以Wordpress2.6中文版为例): (1) 在MySQL中创建Wordpress库&#xff0…

python 内置标准库socketserver模块的思考

socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错。它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 BaseRequestHandler. BaseServer 基本服务器类封装了基本的一些socket操作, socket原语中对so…

关于素数的一些定理

1.何谓素数&#xff1f; 指在一个大于1的整数中&#xff0c;如果一个数只能整除1与本身&#xff0c;则该数为素数&#xff08;质数&#xff09;&#xff0c;否则为合数。 1既不是素数也不是合数 2.素数个数无限多 3.所有大于2的素数都可以唯一的表示为两个平方数之差 pa^2-b^2(…

教师节的感触

刚喝了点酒&#xff0c;因为今天是教师节&#xff0c;我觉得博客是一个很好的平台&#xff0c;可以把自己的一些感想就是的发表出来。把音乐放出来一 边写着博客是一种很自我的感觉&#xff0c;可以在微酣的时候把自己的点滴感受好好的梳理一下倒是一种不错的方式。这是自己第一…

Spring 4.1和Java 8:java.util.Optional

由于Spring 4.1的Java 8的的java.util.Optional &#xff0c;容器对象可能会或可能不包含非空值&#xff0c;支持与RequestParam &#xff0c; RequestHeader和MatrixVariable 。 使用Java 8的java.util.Optional请确保参数永远不会为null 。 请求参数 在此示例中&#xff0c;…

计算机网络层实验路由表苏州科技,苏州科技大学计算机网络实验报告课案.docx...

苏州科技大学计算机网络实验报告课案苏州科技学院 电子信息实验中心实验报告课  程计算机网络原理学    名徐金玮班  级计算机1312专  业计算机科学与技术指导教师陶滔学年 / 学期2015~2016学年第一学期实验一 物理层实验实验项目性质&#xff1a;设计性  计划学…

Fibonacci again and again

Fibonacci again and again http://acm.hdu.edu.cn/showproblem.php?pid1848 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12494 Accepted Submission(s): 5439 Problem Description任何一个大学生对菲波那…

使用闭包的方式实现一个累加函数 addNum

使用闭包的方式实现一个累加函数 addNum&#xff0c;参数为 number 类型&#xff0c;每次返回的结果 上一次计算的值 传入的值&#xff0c;如&#xff1a; addNum(10); //10 addNum(12); //22 addNum(30); //52 写法一 1 function sum(numberOne) {2 var count…

妈妈的菜谱-豉油鸡

我妈周末来我家&#xff0c;给我做一道豉油鸡&#xff0c;我记录下来&#xff0c;分享给大家 1、下午四点半左右&#xff0c;我、老弟以及亲妈&#xff0c;到隔壁市场鸡场&#xff0c;挑选了一只类似的芦花阉鸡活鸡&#xff0c;价格是17块钱每斤&#xff0c;大概三斤多点&#…

【Vegas2008】9月19日-青椒炒南瓜

南瓜&#xff0c;在俺们家&#xff0c;宁夏也叫葫芦。这道菜泡米饭相当好吃。 主料&#xff1a;青椒、南瓜 配料&#xff1a;葱、姜 调料&#xff1a;盐、味精、胡椒粉 做法&#xff1a;1&#xff0c;南瓜切块&#xff0c;青椒切块&#xff1b;2&#xff0c;油烧至6成熟&#x…

计算机机房t4,机房等级-T2-T3-T4-如何划分

如何在众多的IDC服务商中的辨别出服务器和机房环境的好坏呢?小编告诉大家有这么个指标是我们在选购服务器的时候可以参考&#xff0c;且具有权威性的。国际正常时间协会(the Uptime Institute&#xff0c;简称UI)依据数据中心基础设施的可用性把机房划分为四个级别&#xff1a…

在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体

N 1问题是使用ORM解决方案时的常见问题。 当您将某些OneToMany关系的fetchType设置为lazy时&#xff0c;会发生这种情况&#xff0c;以便仅在访问Set / List时才加载子实体。 假设我们有一个具有两个关系的Customer实体&#xff1a;每个客户的一组订单和一组地址。 OneToMany…

JetBrains系列IDE快捷键大全(转载)

编辑 快捷键组合说明Ctrl Space代码自动完成提示&#xff08;选择&#xff09;Alt Enter显示意图动作和快速修复Ctrl P参数信息 &#xff08;在调用方法参数忘记的时候&#xff0c;提示&#xff09;Ctrl Q快速查找文件&#xff0c;可以查找当前类定义的文件等Ctrl 鼠标滑过…

Vs Code 配置C/C++ 开发环境

第一步&#xff1a;下载 Vs Code 点击链接下载Vs Code 下载版本 并安装 https://code.visualstudio.com/ 点击 Download for Windwos 安装时 如图&#xff1a;请一定要勾选 添加到PATH (环境变量&#xff09; 其他选项可根据个人需要选配 但建议全部勾选 第二步&#xf…

28. css样式中px转rem

Vue3:脚手架配置 https://blog.csdn.net/weixin_41424247/article/details/80867351 与原来的vue-cli 2.x版本不同的是&#xff1a;如果使用最新版本的vue/cli初始化vue项目时&#xff0c;通常看不到webpack的配制文件。而在原来的2.x版本&#xff0c;我们可以在utils.js中轻…

集合已修改;可能无法执行枚举操作。

在对某个List进行遍历的同时&#xff0c;需要对其中的Item进行删除操作。 会提示错误&#xff1a;集合已修改&#xff1b;可能无法执行枚举操作 Codeforeach (VirtualTDate vtDate in tempList){ if (vtDate.Date itemTime.Date) { tempList.Remove(vtDate); …