想要做一个沉浸式全屏,但发现刘海屏会出现黑条。找了一阵子找到了解决方案,特此记录下。不过想要进入应用时候不要弹出状态栏而是直接隐藏,没能做到。以后有机会尝试解决下。
public void setFullscreen(boolean isShowStatusBar, boolean isShowNavigationBar) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; getWindow().setAttributes(lp); } int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; if (!isShowStatusBar) { uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; } if (!isShowNavigationBar) { uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } getWindow().getDecorView().setSystemUiVisibility(uiOptions); //隐藏标题栏 getSupportActionBar().hide(); //专门设置一下状态栏导航栏背景颜色为透明,凸显效果。 setNavigationStatusColor(Color.TRANSPARENT); } public void setNavigationStatusColor(int color) { //VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP if (Build.VERSION.SDK_INT >= 21) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().setNavigationBarColor(color); getWindow().setStatusBarColor(color); } }