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

LibGDX沉浸式模式下屏幕顶部出现黑条的解决方法咨询

问题描述

我在libGDX项目中需要使用沉浸式模式,于是在AndroidLauncher.java中添加了代码:

config.useImmersiveMode = true;

但屏幕顶部仍存在黑条(导航栏关闭/开启时均存在该问题)。如何让应用能在该区域绘制内容?

运行环境:

  • Android API 30(Android 11)
  • libGDX 版本 1.11.0

解决方案

1. 让窗口延伸至系统UI区域

仅设置config.useImmersiveMode = true只能隐藏导航栏,但不会让应用布局延伸到状态栏覆盖的区域。需要在AndroidLauncher.java的onCreate方法中添加窗口配置,让内容延伸至状态栏和导航栏下方,并设置透明的系统栏:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
    config.useImmersiveMode = true;

    // 配置窗口延伸及透明系统栏
    getWindow().getDecorView().setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    );
    getWindow().setStatusBarColor(Color.TRANSPARENT);
    getWindow().setNavigationBarColor(Color.TRANSPARENT);

    initialize(new YourGameClass(), config);
}

其中:

  • SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN/SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:让应用布局延伸到状态栏、导航栏的覆盖区域
  • TRANSPARENT系统栏颜色:避免系统栏遮挡应用内容

2. 适配libGDX视口

窗口延伸后,屏幕可用尺寸包含了原系统UI区域,需要确保libGDX的视口正确适配整个屏幕:

  • 若使用Viewport(如ExtendViewport、FitViewport),在resize方法中动态更新视口尺寸:
@Override
public void resize(int width, int height) {
    viewport.update(width, height, true);
}
  • 优先使用基于屏幕真实分辨率的视口配置,避免固定尺寸导致内容无法填充延伸区域。

3. 刘海屏/挖孔屏适配(可选)

如果目标设备有刘海或挖孔,需额外配置允许应用在该区域绘制:

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);
}

该配置允许应用在屏幕短边(顶部/底部)的刘海区域绘制内容。


内容的提问来源于stack exchange,提问作者Viktor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:05:24