Java 以编程方式设置时,必须在装入ad之前设置ad大小和ad单元ID

Java 以编程方式设置时,必须在装入ad之前设置ad大小和ad单元ID,java,android,admob,adview,Java,Android,Admob,Adview,我不知道这里发生了什么,但我正试图通过如下代码动态设置我的广告单元ID,并将其从XML中删除,但仍然会出现错误: 在调用loadAd之前,必须设置ad大小和ad单元ID 以编程方式创建它 View adContainer = findViewById(R.id.adMobView); AdView mAdView = new AdView(context); mAdView.setAdSize(AdSize.BANNER); mAdView.setAdUnitId(YOUR_BANNER_ID

我不知道这里发生了什么,但我正试图通过如下代码动态设置我的广告单元ID,并将其从XML中删除,但仍然会出现错误:

在调用loadAd之前,必须设置ad大小和ad单元ID


以编程方式创建它

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);
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);
在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>
并在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);
((RelativeLayout)adContainer).addView(mAdView);
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);
我使用横幅很长一段时间了,这个答案对我很好。

你有

android:layout_width="wrap_content"
android:layout_height="wrap_content"
发件人:

注意:布局中的智能横幅视图必须占用设备的全部宽度。如果没有,您将收到一条警告消息“没有足够的空间显示广告”,横幅将不会显示

换成

android:layout_width="match_parent"
并在xml文件中设置adUnitID

ads:adUnitId="AD_UNIT_ID"

对我来说,我是这样设置广告类型的:

ads:adSize="Banner"
但应为所有CAP:

ads:adSize="BANNER"

我是这样做的

<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>
这解决了我的问题

不要用这个

xmlns:ads="http://schemas.android.com/tools" 
试过之后,

  • 仅从xml提供adunit ID和adsize
  • 仅从.java文件提供adunit ID和adsize
  • 这个问题由

  • 正在删除
    xmlns:ads=”http://schemas.android.com/apk/res-auto“
    根布局中的行
  • 按如下方式提供adunit ID和adsize

    app:adSize=“智能旗帜”
    app:adUnitId=“@string/banner\u ad\u unit\u id”

  • 清洁和运行应用程序

  • 将此添加到布局中

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

    通过在xml文件中手动设置ads:adUnitId=“UNITID”来尝试一次。如果无法获得您试图设置的add unit Id,您应该通过注册ca-app-pub-3940256099942544/630978111从admob获得它。是的,您可以,我想我的解决方案不是您想要的,所以我做了一项研究,发现了与您相同的问题,请阅读这个解决方案,我没有看到解决方案,除了有一个容器的东西,并在其中注入广告。这是唯一的方法吗?@MikeFlynn正确-您在Java代码中引用容器并将AdView添加到其中。当您在XML中调用com.google.android.gms.ads.AdView时,当您调用setContentView(some_layout.XML)时,它会被实例化,并且可以在没有Java的情况下轻松配置。当您动态地执行它时,它会被构建和绑定。如果你想要一个不同的adview(size/id),你必须创建一个不同的adview。@MorrisonChang我使用容器(RelativeLayout)的方式是因为我必须在同一个容器中使用另一个Banners API,然后在失败的情况下通过编程设置Banners视图。很好的解释,非常重要的是,您不能将AdView声明为xml并以编程方式设置adUnit和adSize!我以前犯过那个错误,但我改正了。这不是一回事。即使我用xml布局编写所有代码,仍然会出现错误。谢谢你提醒我这句话。
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    
    xmlns:ads="http://schemas.android.com/tools" 
    
    xmlns:ads="http://schemas.android.com/apk/res-auto"