安卓设置应用全屏显示操作后仍未生效该如何解决?
安卓应用全屏显示未生效的原因及解决方案
问题原因
你当前使用的是安卓低版本的全屏实现方案,存在明显的兼容性缺陷,无法达到预期效果的核心原因如下:
WindowManager.LayoutParams.FLAG_FULLSCREEN在Android 11(API 30)及以上版本已被官方废弃,无法适配新系统的全屏逻辑- 仅配置
windowFullscreen属性只会隐藏状态栏,不会自动隐藏系统导航栏,也无法适配刘海/挖孔屏的延伸显示需求 - 部分厂商定制ROM对系统栏逻辑做了自定义修改,旧方案无法覆盖适配
解决方案
方案1:全版本兼容代码实现
在Activity的onCreate方法setContentView之前调用如下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { getWindow().setDecorFitsSystemWindows(false); WindowInsetsController controller = getWindow().getInsetsController(); if (controller != null) { // 隐藏状态栏 controller.hide(WindowInsets.Type.statusBars()); // 隐藏导航栏 controller.hide(WindowInsets.Type.navigationBars()); // 配置临时呼出系统栏的行为 controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); } } else { // 兼容Android 11以下版本 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); }
如果需要避免用户临时呼出系统栏后无法自动隐藏,可以将上述逻辑同时在onResume方法中再调用一次。
方案2:补充主题配置
在你现有的主题样式中新增刘海屏适配属性,避免刘海/挖孔区域留白:
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
该属性可以让应用内容延伸到刘海/挖孔屏区域,实现真正的全屏覆盖效果。
内容的提问来源于stack exchange,提问作者yamete senpai
相关产品推荐
相关产品推荐

