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

按AdMob文档动态设置adSize仍报required xml attribute adsize was missing错误如何解决

错误原因
  • 你对官方文档的规则理解存在偏差:官方要求的「adSize和adUnitId均通过代码动态设置」的前提是完全通过代码创建AdView实例,而非在XML中静态声明AdView控件后再补设属性。
  • AdView的构造函数在XML布局加载(inflate)阶段就会校验ads:adSize属性是否存在,这个校验时机远早于你在业务代码中调用setAdSize的时机,所以哪怕你后续代码补设了属性,布局加载阶段就已经抛出了缺失属性的错误。
修复方案

你可以任选以下两种符合官方「属性配置方式统一」规则的方案修复:

方案1:所有属性在XML中配置,无需代码动态设置

直接在XML的AdView标签中补充ads:adSize和ads:adUnitId属性,业务代码仅保留广告加载逻辑即可:

<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
     android:id="@+id/basicBannerAdview"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     ads:adSize="BANNER"
     ads:adUnitId="ca-app-pub-2944323778834513/2840086720"/>

对应业务代码简化为:

final AdView bannerAdView = findViewById(R.id.basicBannerAdview);
bannerAdView.loadAd(AdMobRequestUtil.buildAdRequest(loc, Collections.emptySet()).build());
bannerAdView.resume();
bannerAdView.setVisibility(View.VISIBLE);

方案2:完全通过代码创建AdView,不在XML中声明AdView控件

先在XML布局中预留用于承载广告的容器,比如FrameLayout:

<FrameLayout
    android:id="@+id/bannerAdContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

之后在业务代码中创建AdView实例,设置属性后添加到容器中:

final FrameLayout adContainer = findViewById(R.id.bannerAdContainer);
final AdView bannerAdView = new AdView(this);
bannerAdView.setAdSize(AdSize.BANNER);
bannerAdView.setAdUnitId("ca-app-pub-2944323778834513/2840086720");
adContainer.addView(bannerAdView);
bannerAdView.loadAd(AdMobRequestUtil.buildAdRequest(loc, Collections.emptySet()).build());
bannerAdView.resume();
bannerAdView.setVisibility(View.VISIBLE);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:15:02