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

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

作者: kongzue | 来源:发表于2019-01-13 18:53 被阅读50次

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

    问题描述

    在执行了沉浸式代码的界面中使用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内核的沉浸式全屏播放横竖屏切换底栏遮挡问题及解决方案

          本文链接:https://www.haomeiwen.com/subject/qyeldqtx.html