X5WebView使用

news/2024/9/23 6:21:58/

用过 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 就可以使用了。


http://www.ppmy.cn/news/657584.html

相关文章

[移动端开发]到底什么是WebView?

移动端开发中的WebView到底是什么&#xff1f; 前言&#xff1a;移动端开发的童鞋应该都听说过一个名词 WebView&#xff0c;那么到底什么是WebView&#xff1f;今天我们来讲一下什么是WebView吧 一、WebView到底是什么 WebView&#xff0c;直译是网页视图&#xff0c;是一个基…

webview是什么?作用是什么?和浏览器有什么关系?

Webview 是一个基于webkit的引擎&#xff0c;可以解析DOM 元素&#xff0c;展示html页面的控件&#xff0c;它和浏览器展示页面的原理是相同的&#xff0c;所以可以把它当做浏览器看待。&#xff08;chrome浏览器也是基于webkit引擎开发的&#xff0c;Mozilla浏览器是基于Gecko…

Android的webview有什么用,webview实现有什么用

WebView是android中一个非常重要的控件&#xff0c;它的作用是用来展示一个web页面。它使用的内核是webkit引擎&#xff0c;4.4版本之后&#xff0c;直接使用Chrome作为内置网页浏览器。 作用(推荐学习&#xff1a;Java视频教程) 显示和渲染网页&#xff1b; 可与页面JavaScrip…

红米android system干什么的,Android System Webview是什么东西

这是安卓系统内置webkit内核浏览器的一个组件&#xff0c;组件名称为Webview。 WebView是安卓系统中一款基于webkit引擎、展现web页面的控件。 Android的Webview在低版本和高版本采用了不同的webkit版本内核&#xff0c;在版本更新到4.4后直接使用了Chrome版本。 WebView能够对…

app中的webview是什么?如何理解?

app中的webview是什么&#xff1f;如何理解&#xff1f; 当你上网阅读东西时&#xff0c;我们一般会选择一款浏览器&#xff0c;比如Chrome、火狐、safari、IE或者Edge。你可能不知道这些浏览器之间有一些竞争&#xff0c;而竞争的主要形式就是WebView。 WebView的定义 什么…

JS学习笔记——前端的webview是什么东西

1、webview的概念 疑问&#xff1a;webview是什么&#xff1f;作用是什么&#xff1f;和浏览器有什么关系&#xff1f; 先放一段基本定义&#xff1a; A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply di…

webview详解

一、基础知识 1、webview入门知识 1.我们通常是用浏览器来浏览网页&#xff0c;你很清楚的知道你正在使用浏览器&#xff0c;要么是PC客户端&#xff0c;要么是手机上的app。但是webview是一个嵌入式的浏览器&#xff0c;是嵌入在原生应用中的&#xff0c;你可能都意识不到你在…

什么是webview ?

Andoid 平台&#xff0c;SDK 中有一个控件叫 WebView&#xff1b; IOS/MacOS 平台&#xff0c;SDK 中有一个控件叫 WebView/UIWebView/WKWebView(UIView/NSView)&#xff1b; 这些控件&#xff0c;用于移动端 APP 嵌入(Embed) Web 技术&#xff0c;加载 Web 内容&#xff1b;…