You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:18:33