用过 Android 自带 WebView 的都知道,每次加载数据过多时,等待时间非常久,体验非常差。所以腾讯推出了:腾讯浏览服务,也就是 X5WebView ;下面来看一下效果图:

GitHub 下载地址:https://github.com/wuqingsen/X5WebView

1. 下载jar包及so文件

打开官网,下载 jar 包和 so 文件,下载地址为:https://x5.tencent.com/tbs/sdk.html

下载完毕将 jar 包和 so 文件分别复制到 libs 和 jniLibs 文件夹下,如下图所示:

2. 新建类Application

新建类 MyAplication 在里面启动 x5WebView 内核加载:

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();initX5WebView();}private void initX5WebView() {//搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {@Overridepublic void onViewInitFinished(boolean arg0) {//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。if (arg0) {Log.e("=====myApp", " x5WebView内核加载成功" + arg0);} else {Log.e("=====myApp", " x5WebView内核加载失败" + arg0);}}@Overridepublic void onCoreInitFinished() {}};//x5内核初始化接口QbSdk.initX5Environment(getApplicationContext(), cb);}
}

别忘了在 AndroidManfest.xml 文件中应用:

3. 加入权限

在 AndroidManfest.xml 文件中加入相应的权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />

4. 重写 webView

重写 webView 类,名字为 X5webView,( 注意:不要把包名导入错了 ):

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;/*** author: wu* date: on 2019/2/13.* describe:腾讯X5WebView封装*/
public class X5WebView extends WebView {private WebViewClient client = new WebViewClient() {/*** 防止加载网页时调起系统浏览器*/public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}};@SuppressLint("SetJavaScriptEnabled")public X5WebView(Context arg0, AttributeSet arg1) {super(arg0, arg1);this.setWebViewClient(client);// this.setWebChromeClient(chromeClient);// WebStorage webStorage = WebStorage.getInstance();initWebViewSettings();this.getView().setClickable(true);}private void initWebViewSettings() {WebSettings webSetting = 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 的设计}public X5WebView(Context arg0) {super(arg0);setBackgroundColor(85621);}
}

5. 在 xml 文件中加入 X5WebView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ProgressBarandroid:id="@+id/progressBar"style="?android:attr/progressBarStyleHorizontal"android:layout_width="fill_parent"android:layout_height="5dp"android:indeterminateOnly="false"android:max="100"android:progressDrawable="@drawable/progress_bar_states" /><com.example.qd.webviewx5.X5WebViewandroid:id="@+id/x5WebView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

下面是进度条的样式 progress_bar_states :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background"><shape><corners android:radius="2dp" /><gradientandroid:angle="270"android:centerColor="#E3E3E3"android:endColor="#E6E6E6"android:startColor="#C8C8C8" /></shape></item><item android:id="@android:id/progress"><clip><shape><corners android:radius="2dp" /><gradientandroid:centerColor="#FF1D9AFF"android:endColor="#FF1D9AFF"android:startColor="#FF1D9AFF" /></shape></clip></item>
</layer-list>

6. activity 中加入代码

在对应 activity 中加入代码,代码中包括启动加速、设置进度条、设置点击事件和加载错误的设置 ( 注意:包不要导入错了 ) 。

import com.tencent.smtt.export.external.interfaces.WebResourceError;
import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;public class MainActivity extends AppCompatActivity {private X5WebView mX5WebView;private ProgressBar progressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mX5WebView = findViewById(R.id.x5WebView);progressBar = findViewById(R.id.progressBar);mX5WebView.loadUrl("https://blog.csdn.net/wuqingsen1");initX5WebView();setProgressBar();setClick();}/*** 启用硬件加速*/private void initX5WebView() {try {if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 11) {getWindow().setFlags(android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);}} catch (Exception e) {}}/*** 设置进度条*/private void setProgressBar() {mX5WebView.setWebChromeClient(new WebChromeClient(){@Overridepublic void onProgressChanged(WebView view, int newProgress) {//显示进度条if (newProgress < 100) {progressBar.setProgress(newProgress);progressBar.setVisibility(View.VISIBLE);}else {progressBar.setVisibility(View.GONE);}}});}/*** 点击事件*/private void setClick() {mX5WebView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {return super.shouldOverrideUrlLoading(view, request);//点击事件}@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {super.onReceivedError(view, request, error);//加载错误}});}/*** 返回键监听*/@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (mX5WebView != null && mX5WebView.canGoBack()) {mX5WebView.goBack();return true;} else {return super.onKeyDown(keyCode, event);}}return super.onKeyDown(keyCode, event);}@Overrideprotected void onDestroy() {//释放资源if (mX5WebView != null)mX5WebView.destroy();super.onDestroy();}
}

这样 X5WebView 就可以使用了。

X5WebView使用相关推荐

  1. 腾讯Android自动化测试实战3.3.3 修改Robotium以支持X5WebView

    3.3.3 修改Robotium以支持X5WebView 本节中的X5WebView指QQ浏览器团队出品的腾讯X5内核中的WebView.除了QQ.微信.应用宝等众多腾讯内部产品在使用X5内核外,京东 ...

  2. Android 集成Crosswalk替换成X5WebView

    替换的Crosswalk原因想必用过的都知道 Crosswalk官方已经在2017年不维护了 Crosswalk lib包太大,导致apk体积变大 遇到的问题总结: 在Application中初始化的 ...

  3. 带进度条的x5WebView

    我们在使用webview加载网页的时候都希望顶部都有个进度条显示加载进度,由于在Android 4.4以下版本的Webview使用的是WebKit内核,,而在Android 4.4及其以上版本使用的是 ...

  4. 安卓-使用腾讯TBS浏览服务(X5WebView) - 打开打开PDF,WORD,EXCLE等文件

    Tbs是 官方的接入文档有点坑 ,也在网上找了好几个博客 内容都是一样的 这里我总结下Tbs的使用 和 踩到的坑吧 1.引入SDK, 有两种方式 去官网下载它的SDK :https://x5.tenc ...

  5. Android ScrollView与 X5Webview+RecyclerView的滑动冲突解决

    要解决ScrollView嵌套的X5WebView.滑动.高度冲突,则首先要解决ScrollView与 X5Webview的滑动冲突, <ScrollView     android:layou ...

  6. Android X5WebView网络监听替换WebView失败页面稳定

    一.我这边是集成了腾讯所提供的X5Webview插件,没有别的原因,就感觉比原生处理的稍微好点吧. x5Webview与H5的交互问题 x5同步cookie问题 WebView加载进度条问题处理 H5 ...

  7. android x5全屏白色,x5webview 自定义全屏界面 X5webview完美去掉分享功能和缓存功能(2)...

    privateIX5WebChromeClient.CustomViewCallback xCustomViewCallback;private FrameLayout video_fullView; ...

  8. Android解决X5WebView加载内核不成功的方法

    https://github.com/barteksc/AndroidPdfViewer只是为了展示PDF文件的话可以用这个 参考:https://blog.csdn.net/heshuyu123/a ...

  9. android x5webview 播放视频白屏

    最近项目里面的webview要播放视频,原生的webview不能全屏,就用了腾讯的x5,接入之后发现非全屏下的播放视频是白的,没有画面,只有声音,全屏情况下是好的. 找了半天原因,竟是这一句代码造成的 ...

  10. RxJava+Retrofit+MVP+Dagger2

    传说中的谷歌四件套,按顺序来哈~ 2017.2.20更新:对于用了一段时间的谷歌四件套的开发者们来说,基础应该都已经掌握的差不多了,但是四件套确实很博大精深,要想完全掌握,一是要学习使用技巧,二是要在 ...

最新文章

  1. bzoj1412[ZJOI2009]狼和羊的故事
  2. 理解SQL Server中的锁
  3. VS2015新建C++工程时,Object reference not set to an instance of an object
  4. 国产化之路-统信UOS /Nginx /Asp.Net Core+ EF Core 3.1/达梦DM8实现简单增删改查操作
  5. 什么叫静态构建版本号码_为什么要使用GatsbyJS构建静态网站
  6. NO.34 关于禅道加密
  7. android客户端从服务器端获取json数据并解析的实现代码
  8. java true false_关于java:如何存储boolean返回false / true的次数
  9. 【图】二分图最大权匹配
  10. Windows上Chrome被“毒霸网页“劫持启动页解决方式
  11. 安装配置管理 之 安装和配置 JPackage Java
  12. 【信息系统项目管理师】案例分析高频记忆考点汇总
  13. 解决win7旗舰版无法卸载IE11,恢复系统原内置IE版本浏览器(本人原内置IE8)
  14. go install报错no install location for directory outside GOPATH
  15. 扩展odoo res.partner的问题
  16. 优秀的加密方案-软件加密技巧
  17. 一些通用 编程变量 单词(常用变量名;持续更新...)
  18. 常用的几种PPT做图小技巧!
  19. Redis常用命令小总
  20. 【ParaView教程】第四章 常见问题 —— 怎样在ParaView中绘制矢量分量的等值线/面?

热门文章

  1. IDEA常用快捷键整理大全(非常详细)持续更新中...
  2. Proxmark3的Android客户端,Proxmark3 冰人原版固件及客户端
  3. IDEA查看或修改JDK版本
  4. 微信小程序wxParse使用说明
  5. html 嵌入编辑excel 开源_网页中嵌入Excel控件
  6. Android之ViewStub的简单使用
  7. [转]抢先Mark!微信公众平台开发进阶篇资源集锦
  8. 毕业5年,我把前后端好的书籍整理了一下,希望能帮到你(建议收藏)
  9. 用什么软件测试路由器,软件测试路由器系统的方法及其运用
  10. Ubuntu16.04 pip下载安装tensorflow(GPU版)