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

Mik*_*ynn 34 java android admob adview

我不知道这里发生了什么,但我试图通过下面的代码动态设置我的广告单元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>
Run Code Online (Sandbox Code Playgroud)

    AdView mAdView = (AdView) rootView.findViewById(R.id.adView);
    mAdView.setAdUnitId(getEvent().getAdMobUnitId());
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)

dio*_*jme 54

以编程方式创建它

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);
Run Code Online (Sandbox Code Playgroud)

并在您的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>
Run Code Online (Sandbox Code Playgroud)

编辑

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

我的回答是:

不知道它是否是一个错误,或者你是否unitId每个adView只能有一个它更有意义,因为unitId每个adView 只能有一个,并且从文档中读取 它们有两种方法可以实现,通过实例化一个新的AdView()和程序化的设置unitIdssizesOR仅从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 - 如果没有放入setAdUnitId并以setSize编程方式放置,adView将提醒您 Required xml attribute adUnitId was missing,如果您没有adSize在xml中设置,则相同.

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

通过使用 new AdView()

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

2 - 您可以设置adSizeadUnitId编程它将工作.

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" />
Run Code Online (Sandbox Code Playgroud)

并在onCreate上加载视图

AdView mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)

或者以编程方式完整

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);
Run Code Online (Sandbox Code Playgroud)

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


小智 9

xmlns:ads="http://schemas.android.com/apk/res-auto" 
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。

不要使用这个

xmlns:ads="http://schemas.android.com/tools" 
Run Code Online (Sandbox Code Playgroud)