Android中代码设置AdMob Banner广告ID并结合XML布局报错求助
这个问题我之前也碰到过,核心原因是当你在XML布局中声明AdView组件时,AdMob的库会在布局加载(inflation)阶段检查必填属性adSize是否存在——哪怕你之后打算用代码动态设置这个属性,也绕不开这个检查。下面给你两种可行的解决办法:
方法一:在XML中补充必填属性(推荐方案)
最符合Android开发规范的做法是直接在XML里指定adSize和adUnitId属性,之后如果需要动态修改,依然可以通过代码调整。修改后的XML代码如下:
<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" ads:adSize="SMART_BANNER" ads:adUnitId="ca-app-pub-3940256099942544/6300978111"/>
对应的Java代码可以简化成只加载广告即可(如果不需要动态修改属性的话):
AdView mAdView = findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);
方法二:完全通过代码创建AdView
如果你坚持不在XML中写广告相关属性,可以直接在Java代码里创建AdView实例并添加到布局中,这样就能绕开XML的属性检查。
首先在XML中准备一个容器布局:
<LinearLayout android:id="@+id/ad_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/>
然后在Java代码中创建并配置AdView:
// 1. 创建AdView实例 AdView mAdView = new AdView(this); mAdView.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); mAdView.setAdSize(AdSize.SMART_BANNER); // 2. 设置布局参数并添加到容器 LinearLayout adContainer = findViewById(R.id.ad_container); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ); mAdView.setLayoutParams(params); adContainer.addView(mAdView); // 3. 加载广告 AdRequest adRequest = new AdRequest.Builder().build(); mAdView.loadAd(adRequest);
内容的提问来源于stack exchange,提问作者Robertelo
相关产品推荐
相关产品推荐

