美文网首页
2020-03-04

2020-03-04

作者: EnzoRay | 来源:发表于2020-03-04 11:49 被阅读0次

    昨天同事说我开发的功能在异形屏上顶部状态栏会显示白条,以前写过怎么实现沉浸式的文章,拿出来套用竟然都达不到理想的效果,今天看了https://www.jianshu.com/p/f8711854bc8a?appinstall=0
    这篇文章才实现了沉浸式状态栏。

    经测试,这样在9.0以及9.0以上的异形屏可以顺利显示成全屏模式,但是在8.0以及8.0.1上的异形屏上会因为找不到layoutInDisplayCutoutMode这个参数而报错。可以在8.0以及8.0.1上不设置全屏

    代码如下:

        <style name="CustomTheme" parent="AppTheme">
            <!--<item name="android:windowFullscreen">true</item>-->
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowIsTranslucent">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:statusBarColor">@android:color/transparent</item>
        </style>
    
        private void setWindow(Window window) {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
                WindowManager.LayoutParams lp = window.getAttributes();
                lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
                window.setAttributes(lp);
            }
    
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    
            if(Build.VERSION.SDK_INT < Build.VERSION_CODES.O || Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
                uiOptions = uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
            }
            window.getDecorView().setSystemUiVisibility(uiOptions);
    
            window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
            window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        }
    

    相关文章

      网友评论

          本文标题:2020-03-04

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