2020-03-04

2020-03-04  本文已影响0人  EnzoRay

昨天同事说我开发的功能在异形屏上顶部状态栏会显示白条,以前写过怎么实现沉浸式的文章,拿出来套用竟然都达不到理想的效果,今天看了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);
    }
上一篇下一篇

猜你喜欢

热点阅读