求助:Android Java实现MobilityWare纸牌游戏同款全屏效果
Android Java 实现完全全屏(隐藏状态栏+全屏布局)方案
问题分析
你之前尝试的两种方案都存在局限性:
- 第一种仅让布局延伸至状态栏区域,但状态栏本身仍处于可见状态(仅透明)
- 第二种虽隐藏了状态栏,但布局未延伸到原状态栏区域,无法实现真正的全屏覆盖
分版本实现方案
Android 11(API 30)及以下版本
在Activity的onCreate方法中(需在setContentView之前调用)添加以下代码:
// 启用全屏标记 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 设置系统UI可见性,实现全屏+沉浸式效果 getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN // 隐藏状态栏 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY // 下拉状态栏后自动隐藏,保持沉浸式 ); // 让布局完全覆盖状态栏区域,设置状态栏透明 getWindow().setStatusBarColor(Color.TRANSPARENT); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
Android 12(API 31)及以上版本
Android 12起推荐使用WindowInsetsController来控制系统栏,代码如下:
Window window = getWindow(); WindowInsetsController insetsController = window.getInsetsController(); if (insetsController != null) { // 隐藏状态栏 insetsController.hide(WindowInsets.Type.statusBars()); // 设置系统栏行为:下拉可临时显示,松手后自动隐藏 insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); } // 关闭系统栏对布局的约束,让布局延伸至全屏 window.setDecorFitsSystemWindows(false); window.setStatusBarColor(Color.TRANSPARENT);
额外注意事项
- 检查Activity主题,避免设置与系统栏相关的冲突属性(如固定显示状态栏)
- 若需同时隐藏导航栏,API30及以下可在
setSystemUiVisibility中添加View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;API31及以上则在hide方法中传入WindowInsets.Type.navigationBars() IMMERSIVE_STICKY(或API31+的对应行为)非常适合游戏类应用,能在用户操作时临时唤起状态栏,之后自动恢复全屏
内容的提问来源于stack exchange,提问作者Human
相关产品推荐
相关产品推荐

