以编程方式设置时,必须在 loadAd 之前设置广告尺寸和广告单元 ID

2022-09-01 00:50:15

我不知道这里发生了什么,但我正在尝试通过如下代码动态设置我的广告单元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);

答案 1

以编程方式创建它

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>

编辑

横幅广告的最佳做法是两个横幅广告,每个视图显示一个横幅(一个),如果要在相同的屏幕中显示更多横幅(不推荐),则必须从控制台创建另一个横幅,并为每个横幅创建一个 adView。unitIdunitIdunitId

我的回答是:

不知道这是一个错误,或者你是否每个adView只能有一个,它更有意义,因为你只能有一个每个adView,并从文档中阅读它们显示两种方法,通过实例化一个新的和程序化的设置和OR仅从XML执行。unitIdunitIdAdView()unitIdssizes

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

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

1 - 如果先设置,则可以进行编程。setAdUnitIdadSize

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

3 - 如果您未在 xml 中使用 'setAdUnitId',则它会发出警报,即使您以编程方式设置了这两个属性,也会发出警报。Required xml attribute adUnitId was missingadSize

4 - 如果不按程序方式放置和放置,adView 将提醒您,如果您未在 xml 中设置,则同样如此。setAdUnitIdsetSizeRequired xml attribute adUnitId was missingadSize

5 - 您唯一可以做的程序化操作就是调用以加载广告mAdView.loadAd(adRequest)

通过使用new AdView()

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

2 - 您可以设置和编程它将起作用。adSizeadUnitId

3-如果您尝试使用两次,则此异常将启动,如果您使用setAdUnitAdThe 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" />

和加载视图 on 创建

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

我使用横幅广告很长一段时间,这个答案对我有好处。


答案 2
xmlns:ads="http://schemas.android.com/apk/res-auto" 

这解决了我的问题。

不要使用这个

xmlns:ads="http://schemas.android.com/tools" 

推荐