X5内核的沉浸式全屏播放横竖屏切换底栏遮挡问题及解决方案

在上一篇解决了播放视频的问题后,还存在一些小坑。

问题描述

在执行了沉浸式代码的界面中使用X5内核,如果网页中有视频,第一次点开视频,调用X5自带的全屏播放器播放,会自动横屏+全屏播放,没问题,这时如果返回后再次播放,则会变成竖屏+全屏播放,这时我发现界面底部存在横竖屏切换按钮,但被Android自带的底部导航栏挡住了并不能按到,本篇就会讲述对于此问题的临时解决方案。

在尝试寻找X5内核关于进入视频播放界面的监听器无果后,仔细观察可以发现,在X5进入视频播放界面时界面顶部状态栏被隐藏,但底部导航栏并没有。

横屏播放时还好,但不知道为什么X5内核在第二次进入视频播放界面时会变成默认竖屏的,就导致了此问题的发生。

解决

直接没法解决,我们只有绕点弯路了。

要解决此问题,首先重写界面flag的监听事件 onWindowAttributesChanged:

@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
    super.onWindowAttributesChanged(params);
    Log.i(">>>",getWindow().getAttributes().flags+"");
}

打印日志发现,在X5进入视频播放界面时 flags 的值发生了变化,变为了-2122250880,则可以这么判断:

@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
    super.onWindowAttributesChanged(params);
    if (getWindow().getAttributes().flags ==-2122250880){
        if (!isFullScreen){
            setFullScreen(true);
        }
    }else{
        setFullScreen(false);
    }
}

再加上完全关闭底部导航栏的代码:

private boolean isFullScreen;
private void setFullScreen(boolean enable) {
    if (enable) {
        if (!isFullScreen) {
            isFullScreen = true;
            int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN;
            uiFlags |= 0x00001000;
            getWindow().getDecorView().setSystemUiVisibility(uiFlags);
        }
    } else {
        if (isFullScreen) {
            isFullScreen = false;
            int uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            uiFlags |= 0x00001000;
            getWindow().getDecorView().setSystemUiVisibility(uiFlags);
            setTranslucentStatus(true);
            WindowManager.LayoutParams attrs = getWindow().getAttributes();
            attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
            getWindow().setAttributes(attrs);
        }
    }
}

运行尝试,搞定!

你可能感兴趣的:(X5内核的沉浸式全屏播放横竖屏切换底栏遮挡问题及解决方案)