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

Android平台如何让LibGdx游戏View与AdMob广告View同时正常显示

问题根因与解决方案

你遇到的游戏全屏遮挡广告的问题,由以下几个代码错误导致,对应修改方案如下:

核心错误点

  • AdView未设置有效ID:你在createGameView中通过params.addRule(RelativeLayout.BELOW, adView.getId())约束游戏视图位置,但AdView没有主动设置ID,系统返回的无效ID无法被布局识别,导致游戏视图约束失效直接占满全屏。
  • 游戏视图高度配置错误:LibGDX的渲染视图设置WRAP_CONTENT无法正确适配广告下方的剩余空间,需要设置为MATCH_PARENT才能正常占满可用区域。
  • 变量重复声明:onCreate方法中重复声明了adView、gameView局部变量,覆盖了类成员变量,会导致后续生命周期回调中出现空指针隐患。

具体修改步骤

  1. 给AdView设置有效ID,修改createAdView方法:
private AdView createAdView() {
    Log.d(TAG, "\n\ncreateAdView()");
    adView = new AdView(this);
    // 新增:动态生成唯一ID(API 17及以上支持,符合当前主流Android应用配置)
    adView.setId(View.generateViewId());
    adView.setAdSize(AdSize.SMART_BANNER);
    adView.setAdUnitId(BANNER_AD_UNIT_ID);
    
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
    params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
    adView.setLayoutParams(params);
    adView.setBackgroundColor(Color.BLACK);
    return adView;
}
  1. 修改游戏视图的高度配置,调整createGameView方法:
private View createGameView(AndroidApplicationConfiguration cfg) {
    gameView = initializeForView(new GameTest(), cfg);
    // 修改:高度改为MATCH_PARENT,占满广告下方所有可用空间
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
    params.addRule(RelativeLayout.BELOW, adView.getId());
    gameView.setLayoutParams(params);
    return gameView;
}
  1. 修正onCreate中的变量重复声明问题:
// 原代码:AdView adView = createAdView();
adView = createAdView();
layout.addView(adView);
// 其他广告监听逻辑不变
...
// 原代码:View gameView = createGameView(cfg);
gameView = createGameView(cfg);
layout.addView(gameView);
  1. 可选LibGDX侧适配:因为你仅使用Viewport和Camera,需要在游戏主类的resize(int width, int height)回调中,将传入的height(已经是扣除广告后的可用高度)更新到Viewport和Camera中,避免画面拉伸:
@Override
public void resize(int width, int height) {
    viewport.update(width, height, true);
    camera.update();
}

修改完成后重新编译运行,即可同时显示顶部广告条和下方游戏画面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:39:02