Android全屏应用无法隐藏状态栏仅保留导航栏问题求助
问题排查与解决方案
1 移除布局中多余的fitsSystemWindows属性
你当前activity_home_page.xml里的CoordinatorLayout设置了android:fitsSystemWindows="true",该属性会自动为View添加和系统状态栏、导航栏等高的内边距,是顶部、底部出现空白的核心原因,直接删除该属性即可:
<androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@+id/cl_home_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/bb_bottom_bar">
2 修复主题配置冲突
你的AppTheme中设置了android:windowIsTranslucent="true",半透明窗口属性会和全屏标识冲突,导致全屏效果不生效,直接删除该配置项即可。
同时为了适配刘海/挖孔屏设备,避免顶部预留刘海区域空白,在两个主题中新增刘海屏适配配置:
<!-- 适配Android 9.0+刘海屏,允许内容延伸到刘海区域 --> <item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="p">shortEdges</item>
3 优化Activity全屏逻辑
原有仅设置FLAG_FULLSCREEN的写法不能保证布局正确占用状态栏区域,修改Activity的onCreate代码,在setContentView之前添加如下配置:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏状态栏,保留导航栏 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); } View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(uiOptions); getWindow().setStatusBarColor(Color.TRANSPARENT); // 原有逻辑 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_home_page); overridePendingTransition(R.anim.noanim, R.anim.activity_fade_out); }
4 校验底部标签栏配置
确认你的底部标签栏bb_bottom_bar添加了android:layout_alignParentBottom="true"属性,即可保证标签栏始终在系统导航栏上方,不会出现底部留白或者被导航栏遮挡的问题。
内容的提问来源于stack exchange,提问作者Shubham Agrawal
相关产品推荐
相关产品推荐

