当前位置:   article > 正文

X5WebView使用_腾讯x5webview 使用指南

腾讯x5webview 使用指南

用过 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 内核加载:

  1. public class MyApplication extends Application {
  2. @Override
  3. public void onCreate() {
  4. super.onCreate();
  5. initX5WebView();
  6. }
  7. private void initX5WebView() {
  8. //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
  9. QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
  10. @Override
  11. public void onViewInitFinished(boolean arg0) {
  12. //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
  13. if (arg0) {
  14. Log.e("=====myApp", " x5WebView内核加载成功" + arg0);
  15. } else {
  16. Log.e("=====myApp", " x5WebView内核加载失败" + arg0);
  17. }
  18. }
  19. @Override
  20. public void onCoreInitFinished() {
  21. }
  22. };
  23. //x5内核初始化接口
  24. QbSdk.initX5Environment(getApplicationContext(), cb);
  25. }
  26. }

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

 

3. 加入权限

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

  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" />

 

4. 重写 webView

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

  1. import android.annotation.SuppressLint;
  2. import android.content.Context;
  3. import android.util.AttributeSet;
  4. import com.tencent.smtt.sdk.WebSettings;
  5. import com.tencent.smtt.sdk.WebView;
  6. import com.tencent.smtt.sdk.WebViewClient;
  7. /**
  8. * author: wu
  9. * date: on 2019/2/13.
  10. * describe:腾讯X5WebView封装
  11. */
  12. public class X5WebView extends WebView {
  13. private WebViewClient client = new WebViewClient() {
  14. /**
  15. * 防止加载网页时调起系统浏览器
  16. */
  17. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  18. view.loadUrl(url);
  19. return true;
  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. private void initWebViewSettings() {
  32. WebSettings webSetting = this.getSettings();
  33. webSetting.setJavaScriptEnabled(true);
  34. webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
  35. webSetting.setAllowFileAccess(true);
  36. webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
  37. webSetting.setSupportZoom(true);
  38. webSetting.setBuiltInZoomControls(true);
  39. webSetting.setUseWideViewPort(true);
  40. webSetting.setSupportMultipleWindows(true);
  41. // webSetting.setLoadWithOverviewMode(true);
  42. webSetting.setAppCacheEnabled(true);
  43. // webSetting.setDatabaseEnabled(true);
  44. webSetting.setDomStorageEnabled(true);
  45. webSetting.setGeolocationEnabled(true);
  46. webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
  47. // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
  48. webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
  49. // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
  50. webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
  51. // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension
  52. // settings 的设计
  53. }
  54. public X5WebView(Context arg0) {
  55. super(arg0);
  56. setBackgroundColor(85621);
  57. }
  58. }

 

5. 在 xml 文件中加入 X5WebView

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical">
  5. <ProgressBar
  6. android:id="@+id/progressBar"
  7. style="?android:attr/progressBarStyleHorizontal"
  8. android:layout_width="fill_parent"
  9. android:layout_height="5dp"
  10. android:indeterminateOnly="false"
  11. android:max="100"
  12. android:progressDrawable="@drawable/progress_bar_states" />
  13. <com.example.qd.webviewx5.X5WebView
  14. android:id="@+id/x5WebView"
  15. android:layout_width="match_parent"
  16. android:layout_height="match_parent" />
  17. </LinearLayout>

下面是进度条的样式 progress_bar_states :

  1. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  2. <item android:id="@android:id/background">
  3. <shape>
  4. <corners android:radius="2dp" />
  5. <gradient
  6. android:angle="270"
  7. android:centerColor="#E3E3E3"
  8. android:endColor="#E6E6E6"
  9. android:startColor="#C8C8C8" />
  10. </shape>
  11. </item>
  12. <item android:id="@android:id/progress">
  13. <clip>
  14. <shape>
  15. <corners android:radius="2dp" />
  16. <gradient
  17. android:centerColor="#FF1D9AFF"
  18. android:endColor="#FF1D9AFF"
  19. android:startColor="#FF1D9AFF" />
  20. </shape>
  21. </clip>
  22. </item>
  23. </layer-list>

 

6. activity 中加入代码

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

  1. import com.tencent.smtt.export.external.interfaces.WebResourceError;
  2. import com.tencent.smtt.export.external.interfaces.WebResourceRequest;
  3. import com.tencent.smtt.sdk.WebChromeClient;
  4. import com.tencent.smtt.sdk.WebView;
  5. import com.tencent.smtt.sdk.WebViewClient;
  6. public class MainActivity extends AppCompatActivity {
  7. private X5WebView mX5WebView;
  8. private ProgressBar progressBar;
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. mX5WebView = findViewById(R.id.x5WebView);
  14. progressBar = findViewById(R.id.progressBar);
  15. mX5WebView.loadUrl("https://blog.csdn.net/wuqingsen1");
  16. initX5WebView();
  17. setProgressBar();
  18. setClick();
  19. }
  20. /**
  21. * 启用硬件加速
  22. */
  23. private void initX5WebView() {
  24. try {
  25. if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 11) {
  26. getWindow()
  27. .setFlags(
  28. android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
  29. android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
  30. }
  31. } catch (Exception e) {
  32. }
  33. }
  34. /**
  35. * 设置进度条
  36. */
  37. private void setProgressBar() {
  38. mX5WebView.setWebChromeClient(new WebChromeClient(){
  39. @Override
  40. public void onProgressChanged(WebView view, int newProgress) {
  41. //显示进度条
  42. if (newProgress < 100) {
  43. progressBar.setProgress(newProgress);
  44. progressBar.setVisibility(View.VISIBLE);
  45. }else {
  46. progressBar.setVisibility(View.GONE);
  47. }
  48. }
  49. });
  50. }
  51. /**
  52. * 点击事件
  53. */
  54. private void setClick() {
  55. mX5WebView.setWebViewClient(new WebViewClient(){
  56. @Override
  57. public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
  58. return super.shouldOverrideUrlLoading(view, request);
  59. //点击事件
  60. }
  61. @Override
  62. public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
  63. super.onReceivedError(view, request, error);
  64. //加载错误
  65. }
  66. });
  67. }
  68. /**
  69. * 返回键监听
  70. */
  71. @Override
  72. public boolean onKeyDown(int keyCode, KeyEvent event) {
  73. if (keyCode == KeyEvent.KEYCODE_BACK) {
  74. if (mX5WebView != null && mX5WebView.canGoBack()) {
  75. mX5WebView.goBack();
  76. return true;
  77. } else {
  78. return super.onKeyDown(keyCode, event);
  79. }
  80. }
  81. return super.onKeyDown(keyCode, event);
  82. }
  83. @Override
  84. protected void onDestroy() {
  85. //释放资源
  86. if (mX5WebView != null)
  87. mX5WebView.destroy();
  88. super.onDestroy();
  89. }
  90. }

 

这样 X5WebView 就可以使用了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/864207
推荐阅读
相关标签
  

闽ICP备14008679号