騰訊瀏覽器(X5WebView的使用)
阿新 • • 發佈:2019-01-04
我們在使用Android原生WebView的時候總會遇到各種各樣的相容性問題,比如----遇到 <iframe>標籤引入的視訊連結的時候,發現無法全屏觀看,這個時候就需要使用X5WebView了,還可以進行小窗播放。
本文Demo地址:http://download.csdn.net/download/eueheuen/10265354
GitHub地址:https://github.com/EUEHBin/Demo(歡迎Star)
下載官方SDK,按照官方文件引入,注意:x5暫時不提供64位so檔案,為了保證64位手機能正常載入x5核心,請參照如下連結修改相關配置
在MyApp中初始化X5:(耗時,放在子執行緒)
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); //初始化 x5核心 new Thread(new Runnable() { @Overridepublic void run() { QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onCoreInitFinished() { } @Override public void onViewInitFinished(boolean b) { } };QbSdk.initX5Environment(getApplicationContext(),cb); } }).start(); } }
有關X5的配置:
//WebView private void MyWeb(String url) { webView = (ProgressWebView) findViewById(R.id.wb); webView.setDrawingCacheEnabled(true); webChromeClient = new WebChromeClient(); webView.setWebChromeClient(webChromeClient); webSettings = webView.getSettings(); // 修改ua使得web端正確判斷(加標識+++++++++++++++++++++++++++++++++++++++++++++++++++++) // String ua = webSettings.getUserAgentString(); // webSettings.setUserAgentString(ua + "這裡是增加的標識"); // 網頁內容的寬度是否可大於WebView控制元件的寬度 webSettings.setLoadWithOverviewMode(false); // 儲存表單資料 webSettings.setSaveFormData(true); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //關閉webview中快取 // 是否應該支援使用其螢幕縮放控制元件和手勢縮放 webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); //隱藏原生的縮放控制元件 webSettings.setDisplayZoomControls(false); webView.requestFocus(); //此句可使html表單可以接收鍵盤輸入 webView.setFocusable(true); webSettings.setUseWideViewPort(true); webSettings.setSavePassword(true); webSettings.setGeolocationEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setJavaScriptEnabled(true); // 啟動應用快取 webSettings.setAppCacheEnabled(false); // 設定快取模式 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 設定此屬性,可任意比例縮放。 webSettings.setUseWideViewPort(true); webSettings.setSupportZoom(true); //支援縮放,預設為true。是下面那個的前提。 webSettings.setBuiltInZoomControls(true); //設定內建的縮放控制元件。若為false,則該WebView不可縮放 // 頁面載入好以後,再放開圖片 //mSettings.setBlockNetworkImage(false); // 使用localStorage則必須開啟 webSettings.setDomStorageEnabled(true); // 排版適應螢幕 webSettings.setLayoutAlgorithm(com.tencent.smtt.sdk.WebSettings.LayoutAlgorithm.NARROW_COLUMNS); // WebView是否支援多個視窗。 webSettings.setSupportMultipleWindows(true); webSettings.setUseWideViewPort(true); // 關鍵點 webSettings.setAllowFileAccess(true); // 允許訪問檔案 //將圖片調整到適合webview的大小 webSettings.setUseWideViewPort(true); // webview從5.0開始預設不允許混合模式,https中不能載入http資源,需要設定開啟。 // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); // } // 縮放至螢幕的大小 webSettings.setLoadWithOverviewMode(true); //其他細節操作 webSettings.setAllowFileAccess(true); //設定可以訪問檔案 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支援通過JS開啟新視窗 webSettings.setLoadsImagesAutomatically(true); //支援自動載入圖片 webSettings.setDefaultTextEncodingName("utf-8");//設定編碼格式 webSettings.setDomStorageEnabled(true);//JS在HTML裡面設定了本地儲存localStorage,java中使用localStorage則必須開啟 webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setUseWideViewPort(true); //自適應螢幕 //以下介面禁止(直接或反射)呼叫,避免視訊畫面無法顯示: //webView.setLayerType(); webView.setDrawingCacheEnabled(true); //去除QQ瀏覽器推廣廣告 getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { ArrayList<View> outView = new ArrayList<View>(); getWindow().getDecorView().findViewsWithText(outView,"QQ瀏覽器",View.FIND_VIEWS_WITH_TEXT); if(outView.size()>0){ outView.get(0).setVisibility(View.GONE); } } }); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView webView, String s) { webView.loadUrl(s); return true; } @Override public void onPageStarted(WebView webView, String s, Bitmap bitmap) { super.onPageStarted(webView, s, bitmap); } @Override public void onPageFinished(WebView webView, String s) { super.onPageFinished(webView, s); } @Override public void onReceivedError(WebView webView, int i, String s, String s1) { super.onReceivedError(webView, i, s, s1); } }); webView.loadUrl(url); }