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);
}