Как заставить AdView занимать место даже при запросе рекламы? (Андроид)

Я использую Google AdMob Ads SDK 4.0.4 для Android

По умолчанию AdView не будет иметь размера, пока объявление не будет загружено. Это может вызвать проблемы, если у вас есть кнопки над или под объявлением.

Пользователь может случайно нажать на объявление, если оно вернется именно в тот момент, когда он собирается нажать кнопку.

В старом SDK admob я решил это, используя setGoneWithoutAd (false). Таким образом, место будет сохранено, даже если объявление еще не возвращено.

В новом SDK (Google Admob Ads SDK 4.0.4) мне удается сделать то же самое, используя это быстрое исправление: зарезервируйте место, поместив рекламу в макет с шириной = "320dp" и высотой = "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 «занимать» место даже при запросе рекламы?

Заранее спасибо!


person Kitti Wateesatogkij    schedule 19.04.2011    source источник
comment
не могли бы вы отметить мой ответ как принятый, если считаете его правильным?   -  person martom    schedule 29.12.2020


Ответы (3)


Сначала вы должны решить, какой размер объявления вы хотите. Есть пара предустановленных.

Проще всего работать с SMART_BANNER, он адаптирует свою ширину в соответствии с текущей шириной экрана, а его высота будет 32, 50 или 90 dp для высоты экрана ‹=400, (>400 && ‹ =720) или >720 dp соответственно.

Как только вы узнаете тип запрашиваемого баннера, вы объявляете его в свойстве adSize и резервируете для него место, используя layout_width< /strong> и 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

person martom    schedule 01.09.2016

Ты пробовал:

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

Я использую AdWhirl, чтобы показывать свои объявления для себя, и у меня это с фиксированным представлением, подобным этому с фиксированными размерами. Похоже, вы настроили перенос содержимого, чтобы представление исчезало, когда там ничего нет. Попробуйте и дайте мне знать, как это работает.

person Shikima    schedule 29.07.2011
comment
Я надеялся на решение, которое не требует жесткого кодирования размера в макете :-( - person James; 29.05.2013

В моем дизайне баннера:

<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 и показывает это

person JP711    schedule 02.12.2020