通过程序设置时,必须在loadAd之前设置广告尺寸和广告单元ID


问题内容

我不知道这是怎么回事,但是我试图通过下面的代码动态设置广告单元ID,并将其从XML中删除,但仍然出现错误:

必须在调用loadAd之前设置广告尺寸和广告单元ID。

<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);

问题答案:

以编程方式创建

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),如果要在同一屏幕中显示更多横幅广告(不推荐),则必须unitId控制台创建另一个横幅广告,并为每个视图创建一个adView
unitId

我的答案是:

不知道它是否是一个错误,或者unitId每个adView只能有一个错误unitId,并且更有意义,因为每个adView
只能有一个错误,并且从文档中读取
它们显示了两种方法来实现此目的,方法是实例化一个新的程序化AdView()对象设置“ unitIds和” sizes或“仅”从XML执行。

我做了一些测试以得出这个结论。

通过使用您的中的findViewById com.google.android.gms.ads.AdView

1- setAdUnitId如果adSize先设置,则可以编程。

2- setAdUnitId如果它已经存在于xml中,则无法以编程方式进行。

3 -如果你没有在你的XML使用“setAdUnitId”,它会提醒Required xml attribute adUnitId was missing,与同为adSize,即使你设定编程两个属性。

4 -如果不把setAdUnitIdsetSize,并把它程式设计,AdView中会提醒你 Required xml attribute adUnitId was missing,如果你不设置相同的adSizeXML格式。

5-以编程方式唯一可以做的就是调用mAdView.loadAd(adRequest)加载广告

通过使用 new AdView()

1-如果您创建一个空的布局,然后将adView引用添加到此视图,则它将起作用。

2-您可以设置adSize和以adUnitId编程方式运行。

3-如果您尝试使用setAdUnitAd两次The ad unit ID can only be set once on AdView.,则使用findViewById

我的结论是:

您只能从XML使用”

<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" />

并在onCreate上加载视图

AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);

或完全以编程方式

View adContainer = findViewById(R.id.adMobView);
AdView mAdView = new AdView(context);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(YOUR_BANNER_ID);
adContainer.addView(mAdView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);

我使用横幅很长时间了,这个答案对我很有帮助。