腾讯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,一经查实,立即删除!

相关文章

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

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

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;…

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任何一个大学生对菲波那…

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); …

UI测试脸型软件,App脸型美化剖析|UI-影视-其他|观点|freshoil - 原创文章 - 站酷 (ZCOOL)...

本文基于市面上多款App的美颜效果&#xff0c;做了一个对比分析&#xff0c;整理出一个可以指导美颜调教的参考规范。研究的几个要点如下&#xff1a;1.通过对 某陌、某音、某Y、某他相机、某天P图的效果对比分析2.本次只针对默认效果做对比(某Y无默认则选择自然)3.统一使用前置…

使用Docker,Chef和Amazon OpsWorks进行集群范围的Java / Scala应用程序部署

Docker非常适合在单个节点上运行隔离的容器。 但是&#xff0c;大多数软件系统都在多个节点上运行&#xff0c;因此&#xff0c;除了Docker之外&#xff0c;我们还需要某种方法来指定哪些容器应在哪些节点上运行。 我要解决的特定问题如下&#xff1a;我有两个Scala守护程序&a…

一个逐步“优化”的范例程序(转)

reference URL&#xff1a;http://www.tracefact.net/Software-Design/A-Sample-Design.aspx本文是《Object-Oriented Analysis and Design》一书第一章和第五章的读书笔记。我对书中提供的一个范例程序进行了总结和整理&#xff0c;通过逐步优化这个乐器管理的范例程序&#x…

Java SE 8新特性导览:使用Lambda Expression进行函数式编程

“ Java SE 8新功能浏览 ”系列的这篇文章将深入了解Lambda表达式 。 我将向您展示Lambda表达式的几种不同用法。 它们都具有功能接口的共同实现。 我将解释编译器如何从代码中推断信息&#xff0c;例如特定类型的变量以及后台实际发生的情况。 在上一篇文章“ Java SE 8新功能…

停止尝试使用内部DB框架模拟SQL OFFSET分页!

我敢肯定&#xff0c;到目前为止&#xff0c;您已经以多种方式弄错了。 而且您可能很快将无法正确处理。 那么&#xff0c;当您可以实施业务逻辑时&#xff0c;为什么还要在SQL调整上浪费您的宝贵时间呢&#xff1f; 让我解释… 直到最近的SQL&#xff1a;2008标准 &#xff0…

和朱晔一起复习Java并发(五):并发容器和同步器

和朱晔一起复习Java并发&#xff08;五&#xff09;&#xff1a;并发容器和同步器 本节我们先会来复习一下java.util.concurrent下面的一些并发容器&#xff0c;然后再会来简单看一下各种同步器。 ConcurrentHashMap和ConcurrentSkipListMap的性能 首先&#xff0c;我们来测试一…

Hive:使用Apache Hive查询客户最喜欢的搜索查询和产品视图计数

这篇文章涵盖了使用Apache Hive查询存储在Hadoop下的搜索点击数据。 我们将以示例的方式生成有关总产品浏览量的客户排名靠前的搜索查询和统计信息。 继续之前的文章 使用大数据分析客户产品搜索点击次数 &#xff0c; Flume&#xff1a;使用Apache Flume收集客户产品搜索点…

expdp错误案例

转自:https://www.cnblogs.com/kerrycode/p/3960328.html Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例&#xff0c;下面总结一些自己使用数据泵(Data Dump)过程当中遇到的问题以及解决方法。都是在使用过程中遇到的问题&#xff0c;以后陆续遇到数据…

HashSet源码分析:JDK源码系列

1.简介 继续分析源码&#xff0c;上一篇文章把HashMap的分析完毕。本文开始分析HashSet简单的介绍一下。 HashSet是一个无重复元素集合&#xff0c;内部使用HashMap实现&#xff0c;所以HashMap的特征耶继承了下来。存储的元素是无序的并且HashSet允许使用空的元素。 HashSet是…

修改左侧导航显示样式(转载自Sunmoonfire's artistic matrix)

这是一片非常好的文章&#xff0c;修改下CSS就可以改变左侧导航栏的样式&#xff0c;在网上找了一些都是要写代码的。怕连接失效&#xff0c;所以直接将文章考了过来&#xff0c;希望作者原谅&#xff0c;如有不妥&#xff0c;请通知一声&#xff0c;我会将文章删掉&#xff01…

tf.argmax()以及axis

tf.argmax()表示返回最大值的索引号&#xff0c;axis为0 &#xff0c;表示返回每列最大值索引号。axis为1 &#xff0c;表示返回每行最大值索引号 结果为 转载于:https://www.cnblogs.com/san333/p/10507402.html

jquery ajax 上传文件 demo,Jquery+AJAX上传文件,无刷新上传并重命名文件

index.htmlAjax上传图片Ajax上传图片function upload(){var form new FormData(document.getElementById("form"));$.ajax({url:"upload.php",type:"post",data:form,cache: false,processData: false,contentType: false,success:function(dat…

Meet Fabric8:基于Camel和ActiveMQ的开源集成平台

面料8 Fabric8是Red Hat的JBoss Fuse产品的Apache 2.0许可上游社区。 这是一个基于Apache ActiveMQ &#xff0c; Camel &#xff0c; CXF &#xff0c; Karaf &#xff0c; HawtIO等的集成平台。 它提供了自动化的配置和部署管理&#xff0c;以帮助使部署变得容易&#xff0…

Django之web框架的本质

web框架的本质及自定义web框架 我们可以这样理解&#xff1a;所有的Web应用本质上就是一个socket服务端&#xff0c;而用户的浏览器就是一个socket客户端&#xff0c;基于请求做出响应&#xff0c;客户都先请求&#xff0c;服务端做出对应的响应&#xff0c;按照http协议的请求…