X5WebView使用
用過 Android 自帶?WebView 的都知道,每次加載數(shù)據(jù)過多時(shí),等待時(shí)間非常久,體驗(yàn)非常差。所以騰訊推出了:騰訊瀏覽服務(wù),也就是?X5WebView ;下面來看一下效果圖:
GitHub 下載地址:https://github.com/wuqingsen/X5WebView
?
1.?下載jar包及so文件
打開官網(wǎng),下載 jar 包和 so 文件,下載地址為:https://x5.tencent.com/tbs/sdk.html
下載完畢將 jar 包和 so 文件分別復(fù)制到?libs 和 jniLibs 文件夾下,如下圖所示:
?
2. 新建類Application
新建類 MyAplication 在里面啟動(dòng) x5WebView 內(nèi)核加載:
public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();initX5WebView();}private void initX5WebView() {//搜集本地tbs內(nèi)核信息并上報(bào)服務(wù)器,服務(wù)器返回結(jié)果決定使用哪個(gè)內(nèi)核。QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {@Overridepublic void onViewInitFinished(boolean arg0) {//x5內(nèi)核初始化完成的回調(diào),為true表示x5內(nèi)核加載成功,否則表示x5內(nèi)核加載失敗,會(huì)自動(dòng)切換到系統(tǒng)內(nèi)核。if (arg0) {Log.e("=====myApp", " x5WebView內(nèi)核加載成功" + arg0);} else {Log.e("=====myApp", " x5WebView內(nèi)核加載失敗" + arg0);}}@Overridepublic void onCoreInitFinished() {}};//x5內(nèi)核初始化接口QbSdk.initX5Environment(getApplicationContext(), cb);} }別忘了在 AndroidManfest.xml 文件中應(yīng)用:
?
3. 加入權(quán)限
在 AndroidManfest.xml 文件中加入相應(yīng)的權(quán)限:
<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,(?注意:不要把包名導(dǎo)入錯(cuò)了?):
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() {/*** 防止加載網(wǎng)頁時(shí)調(diào)起系統(tǒng)瀏覽器*/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 的設(shè)計(jì)}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>下面是進(jìn)度條的樣式?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 中加入代碼
在對(duì)應(yīng) activity 中加入代碼,代碼中包括啟動(dòng)加速、設(shè)置進(jìn)度條、設(shè)置點(diǎn)擊事件和加載錯(cuò)誤的設(shè)置 ( 注意:包不要導(dǎo)入錯(cuò)了?) 。
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) {}}/*** 設(shè)置進(jìn)度條*/private void setProgressBar() {mX5WebView.setWebChromeClient(new WebChromeClient(){@Overridepublic void onProgressChanged(WebView view, int newProgress) {//顯示進(jìn)度條if (newProgress < 100) {progressBar.setProgress(newProgress);progressBar.setVisibility(View.VISIBLE);}else {progressBar.setVisibility(View.GONE);}}});}/*** 點(diǎn)擊事件*/private void setClick() {mX5WebView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {return super.shouldOverrideUrlLoading(view, request);//點(diǎn)擊事件}@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {super.onReceivedError(view, request, error);//加載錯(cuò)誤}});}/*** 返回鍵監(jiān)聽*/@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 就可以使用了。
總結(jié)
以上是生活随笔為你收集整理的X5WebView使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MT6763芯片资料MT6763处理器性
- 下一篇: 科学家计算机模拟宇宙,科学家利用计算机模