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局部变量,覆盖了类成员变量,会导致后续生命周期回调中出现空指针隐患。
具体修改步骤
- 给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; }
- 修改游戏视图的高度配置,调整
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; }
- 修正
onCreate中的变量重复声明问题:
// 原代码:AdView adView = createAdView(); adView = createAdView(); layout.addView(adView); // 其他广告监听逻辑不变 ... // 原代码:View gameView = createGameView(cfg); gameView = createGameView(cfg); layout.addView(gameView);
- 可选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
相关产品推荐
相关产品推荐

