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
相关产品推荐
相关产品推荐

