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

