zoukankan      html  css  js  c++  java
  • 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就可以。

  • 相关阅读:
    协议
    网页制作
    知识点--------二维数组
    方法---------拖延,清屏,前景色,背景色
    小知识点------遍历数组、switch case、do while
    知识点-----------函数
    循环经典--------冒泡排序,查找。
    知识点-------一维数组
    循环语句-----经典案例
    知识点--循环语句
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/14830356.html
Copyright © 2011-2022 走看看