我不知道这里发生了什么,但我试图通过下面的代码动态设置我的广告单元ID并将其从XML中移除但仍然会收到错误:
广告尺寸和广告单元ID必须在调用loadAd之前设置。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER">
</com.google.android.gms.ads.AdView>
和
AdView mAdView = (AdView) rootView.findViewById(R.id.adView);
mAdView.setAdUnitId(getEvent().getAdMobUnitId());
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
答案 0 :(得分:49)
以编程方式创建
View adContainer = findViewById(R.id.adMobView);
AdView mAdView = new AdView(context);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(YOUR_BANNER_ID);
((RelativeLayout)adContainer).addView(mAdView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
在你的xml文件中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/adMobView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
修改强>
横幅的最佳做法是,每个视图两个显示一个横幅(一个unitId
),如果要在同一个屏幕中显示更多横幅(不推荐),则必须创建另一个{{1}来自console,每个unitId
都有一个adView。
我的回答是:
不知道它是否是一个错误,或者每个adView只能有一个unitId
并且它更有意义,因为每个adView只能有一个unitId
,并且从{{读取3}}他们通过实例化新的unitId
并以编程方式设置AdView()
和unitIds
来显示两种方法。
只从XML做。
我做了一些测试来得出这个结论。
使用sizes
1 - 如果先设置com.google.android.gms.ads.AdView
,则可以以编程方式setAdUnitId
。
2 - 如果它已经在您的xml中,则不能以adSize
编程。
3 - 如果您未在xml中使用“setAdUnitId”,即使您以编程方式设置这两个属性,它也会向setAdUnitId
发出警报,Required xml attribute adUnitId was missing
也会发出相同的警告。
4 - 如果没有放置adSize
和setAdUnitId
并以编程方式放置,则adView会提醒您setSize
,如果您未在xml中设置Required xml attribute adUnitId was missing
则相同。
5 - 您可以通过编程方式执行adSize
加载广告
使用mAdView.loadAd(adRequest)
1 - 如果您创建一个空布局,然后将adView引用添加到此视图,它将起作用。
2 - 您可以通过编程方式设置new AdView()
和adSize
。
3-如果您尝试使用adUnitId
两次,如果您使用setAdUnitAd
The ad unit ID can only be set once on AdView.
我的结论是:
您只能使用XML“
findViewById
并在onCreate上加载视图
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-my_id_number_was_ommited_by_security" />
或以编程方式完整
AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
我长时间使用横幅,答案对我有好处。
答案 1 :(得分:5)
xmlns:ads="http://schemas.android.com/apk/res-auto"
这解决了我的问题。
请勿使用
xmlns:ads="http://schemas.android.com/tools"
答案 2 :(得分:1)
你有
android:layout_width="wrap_content"
android:layout_height="wrap_content"
自: https://developers.google.com/admob/android/banner#smart_banners
注意:布局中的智能横幅视图必须占用设备的整个宽度。如果没有,您会收到一条警告,上面显示“没有足够的空间展示广告”,并且不会显示横幅。
将其更改为
android:layout_width="match_parent"
并在xml文件中设置您的adUnitID。
ads:adUnitId="AD_UNIT_ID"
答案 3 :(得分:0)
对我来说,我设置的广告类型如下:
ads:adSize="Banner"
虽然它应全部上限:
ads:adSize="BANNER"
答案 4 :(得分:0)
我已经这样做了
<LinearLayout xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_main_screen_container"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="horizontal"/>
</LinearLayout>
代码
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.newone);
initAdsAccount();
initAds();
}
private void initAdsAccount()
{
String accountId = AdsConstants.my_fake_ads_account_id;
if (AdsConstants.isAdsMode)
{
accountId = AdsConstants.my_ads_account_id;
}
MobileAds.initialize(this, accountId);
}
private void initAds()
{
findViewById(R.id.ll_main_screen_container).post(//
new Runnable()
{
@Override
public void run()
{
LinearLayout adContainer = findViewById(R.id.ll_main_screen_container);
AdView mAdView = new AdView(MainActivity.this);
mAdView.setAdSize(AdSize.BANNER);
if (AdsConstants.isAdsMode)
{
mAdView.setAdUnitId(AdsConstants.main_screen_bottom_banner_id);
}
else
{
mAdView.setAdUnitId(AdsConstants.fake_banner_id);
}
adContainer.addView(mAdView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}//
);
}
答案 5 :(得分:0)
尝试后,
问题由
解决xmlns:ads="http://schemas.android.com/apk/res-auto"
行。提供广告单元ID并按以下方式广告化
app:adSize="SMART_BANNER"
app:adUnitId="@string/banner_ad_unit_id"
答案 6 :(得分:0)
将此添加到您的布局
xmlns:ads="http://schemas.android.com/apk/res-auto"
答案 7 :(得分:-1)
尝试在XML中设置广告单元ID
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"
像
ads:adUnitId="ca-app-pub-3940256099942544/6300978"
或查找链接以获取更多详细信息 https://developers.google.com/admob/android/quick-start