Android解決部分機型WebView播放視頻全屏按鈕灰色無法點擊、點擊全屏白屏無法播放等問題


一、場景描述

  在Android混合開發中Html中可以播放視頻,視頻播放采用<Video>標簽。視頻可以全屏播放。

  用這種方式播放視頻在大部分機型下沒啥問題,但是有部分機型全屏播放時會出現全屏按鈕灰色不可點擊或者點擊全屏按鈕直接白屏等問題。

  解決方法也比較簡單,分如下三步:

二、解決辦法

  第一步:

     給WebView對應的Activity設置硬件加速。ps:此處是解決全屏按鈕灰色不可點擊或者全屏按鈕出不來等問題

    在AndroidManifest.xml中的對應的Activity中設置android:hardwareAccelerated = "true"

    

 <activity
            android:name=".ui.h5.activity.WebViewActivity"
            android:screenOrientation="portrait"
            android:hardwareAccelerated = "true"/>

  第二步:

    在Activity或者Fragment中的WebView設置之前加上下面的代碼:

    

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
                WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

  

  第三步:

    設置WebView的WebChromeClient回調函數。並重寫onShowCustomView和onHideCustomView。然后在這個兩個方法中加入全屏展示和取消全屏展示時的相關代碼。ps:點擊全屏按鈕會回調onshowCustomView點擊取消全屏會調用onHideCustomView。具體代碼如下所示:

//全局變量
private View mCustomView;    //用於全屏渲染視頻的View
    private IX5WebChromeClient.CustomViewCallback mCustomViewCallback;
//相關重寫代碼

 

mWebView.setWebChromeClient(new CustomJsWebChromeClient() {

          

            /**
             * 解決WebView播放視頻點擊全屏按鈕白屏的問題。
             * ps:如果去掉則部分機型視頻全屏展示時有問題
             */
            @Override
            public void onShowCustomView(View view, IX5WebChromeClient.CustomViewCallback customViewCallback) {
                super.onShowCustomView(view, customViewCallback);
                if (mCustomViewCallback != null) {
                    mCustomViewCallback.onCustomViewHidden();
                    mCustomViewCallback = null;
                    return;
                }
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
                ViewGroup parent = (ViewGroup) mWebView.getParent().getParent();
                parent.setVisibility(View.GONE);
                ((ViewGroup) parent.getParent()).addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                mCustomView = view;
                mCustomViewCallback = customViewCallback;
            }
            /**
             * 解決WebView播放視頻點擊全屏按鈕白屏的問題。
             * ps:如果去掉則部分機型視頻全屏展示時有問題
             */
            @Override
            public void onHideCustomView() {
                super.onHideCustomView();
                if (mCustomView != null) {
                    if (mCustomViewCallback != null) {
                        mCustomViewCallback.onCustomViewHidden();
                        mCustomViewCallback = null;
                    }
                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

                    if (mCustomView != null && mCustomView.getParent() != null) {
                        ViewGroup parent = (ViewGroup) mCustomView.getParent();
                        parent.removeView(mCustomView);

                        if (mWebView.getParent().getParent() != null) {
                            ViewGroup parent2 = (ViewGroup) mWebView.getParent().getParent();
                            parent2.setVisibility(View.VISIBLE);
                        }
                    }
                    mCustomView = null;
                }
            }
        }

 //到此就結束了,大家不用關注setWebChromeClient的回調函數用的是不是Android原生的,重點關注回調函數中如上的兩個回調方法就行了,不用做改動,直接copy就可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM