Android解决部分机型WebView播放视频全屏按钮灰⾊⽆法点击、点
击全屏⽩屏⽆法播放等问题
⼀、场景描述
  在Android混合开发中Html中可以播放视频,视频播放采⽤<Video>标签。视频可以全屏播放。
  ⽤这种⽅式播放视频在⼤部分机型下没啥问题,但是有部分机型全屏播放时会出现全屏按钮灰⾊不可点击或者点击全屏按钮直接⽩屏等问题。
  解决⽅法也⽐较简单,分如下三步:
⼆、解决办法
  第⼀步:
     给WebView对应的Activity设置硬件加速。ps:此处是解决全屏按钮灰⾊不可点击或者全屏按钮出不来等问题
    在l中的对应的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) {
if (mCustomViewCallback != null) {
mCustomViewCallback = null;
return;
}
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
ViewGroup parent = (ViewGroup) Parent().getParent();
parent.setVisibility(View.GONE);
((ViewGroup) Parent()).addView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.M
ATCH_PARENT));                mCustomView = view;
mCustomViewCallback = customViewCallback;
}
/**
* 解决WebView播放视频点击全屏按钮⽩屏的问题。
* ps:如果去掉则部分机型视频全屏展⽰时有问题
*/
@Override
public void onHideCustomView() {
if (mCustomView != null) {
if (mCustomViewCallback != null) {
mCustomViewCallback = null;
}
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
if (mCustomView != null && Parent() != null) {
ViewGroup parent = (ViewGroup) Parent();
if (Parent().getParent() != null) {
video安卓下载ViewGroup parent2 = (ViewGroup) Parent().getParent();
parent2.setVisibility(View.VISIBLE);
}
}
mCustomView = null;
}
}
}
 //到此就结束了,⼤家不⽤关注setWebChromeClient的回调函数⽤的是不是Android原⽣的,重点关注回调函数中如上的两个回调⽅法就⾏了,不⽤做改动,直接copy就可以。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。