如何在请求广告时让AdView“占用”空间? (机器人)

时间:2011-04-19 11:41:49

标签: android android-layout admob banner-ads adview

我正在使用Google AdMob Ads SDK 4.0.4 for Android

默认情况下,在加载广告之前,AdView没有尺寸。如果广告上方或下方有按钮,则可能会出现问题。

如果广告在他们即将点击按钮的确切时刻返回,用户可能会意外点击该广告。

在旧的admob SDK中,我使用setGoneWithoutAd(false)解决了这个问题。这样,即使广告尚未退回,也会保留空间。

在新的SDK(Google Admob Ads SDK 4.0.4)中,我设法做到了这一点 使用此快速修复:通过将广告放在某个布局中来保留空间 width =“320dp”,height =“50dp”

<LinearLayout 
                        android:layout_width="320dp" 
                        android:layout_height="50dp" > 
                  <com.google.ads.AdView android:id="@+id/adview" 
                         android:layout_width="wrap_content" 
                         android:layout_height="wrap_content" 
                         ads:adUnitId="xxxxxxxxxxx" 
                         ads:adSize="BANNER"/> 
</LinearLayout> 

它有效,但我不确定这是否是一个正确的方法。(我会遇到着名的“没有足够的空间来展示广告!”问题吗?)

总结一个问题:即使在请求广告时,如何(正确)使AdView“占用”空间?

提前谢谢!

3 个答案:

答案 0 :(得分:5)

你试过了吗?

 <com.google.ads.AdView android:id="@+id/adview" 
                     android:layout_width="320dip" 
                     android:layout_height="50dip" 
                     ads:adUnitId="xxxxxxxxxxx" 
                     ads:adSize="BANNER"/> 

我使用AdWhirl为我提供广告,我拥有的方式是固定视图,具有固定尺寸。看起来你已将它设置为包装内容,使视图在没有任何内容时消失。试一试,让我知道它是如何运作的。

答案 1 :(得分:3)

首先,您必须确定所需的广告尺寸。有几个预定义的。

最容易使用的是 SMART_BANNER ,它会调整它的宽度以匹配当前的屏幕宽度, 对于屏幕高度<= 400,(>&gt;&amp;&lt; = 720)或> 720 dp,它的高度分别为32,50或90 dp。

一旦您知道要请求的横幅类型,就可以在 adSize 属性上声明它,并使用 layout_width layout_height 属性。

例如,对于SMART_BANNER,您可以执行以下操作:

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="@dimen/ad_banner_height"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="xxxxxxxxx"/>

您可以将ad_banner_height设置为以下值:

values/dimens/ad_banner_height --> 32dp
values-h400dp/dimens/ad_banner_height --> 50dp
values-h720dp/dimens/ad_banner_height --> 90dp

对于其他横幅尺寸,请检查:https://developers.google.com/admob/android/banner#banner_sizes

答案 2 :(得分:0)

在我的横幅设计中:

<com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:visibility="gone"
        app:adSize="BANNER"
        app:adUnitId="ca-app-pub-3940256099942544/6300978111"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </com.google.android.gms.ads.AdView>

如果不是高级模式,则​​调用此方法

private void showBanner(){
        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        mAdView.setVisibility(View.VISIBLE);
        mAdView.setAdListener(new AdListener(){

            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                mAdView.setLayoutParams(layoutParams);
                mAdView.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAdFailedToLoad(LoadAdError loadAdError) {
                super.onAdFailedToLoad(loadAdError);
                mAdView.setVisibility(View.GONE);
            }
        });
    }

首先,我展示了在设计中分配了60dp的横幅广告,我添加了一个侦听器,以便在横幅广告无法加载时隐藏该空间,但是如果横幅广告已加载,则会在高度和宽度上分配WRAP_CONTENT并显示 >