Подтвердить что ты не робот

Установите баннер AdMob в соответствии с шириной родителя по XML

Я пытаюсь настроить рекламное объявление AdMob, чтобы оно соответствовало его ширине.

Я попробовал как образец:

<com.google.ads.AdView
        android:id="@+id/ad"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        ads:adSize="BANNER"
        ads:adUnitId="app-pub-id"
        ads:loadAdOnCreate="true"/>

И получил:

enter image description here

Я также пробовал:

ads:adSize="SMART_BANNER"

В предварительном просмотре XML IDE я получил:

enter image description here

Но на самом деле объявление не соответствовало его родительской ширине.

Кто-нибудь?

4b9b3361

Ответ 1

Правильный способ установки баннера AdMob в соответствии с его родителем с помощью XML:

<com.google.ads.AdView
        android:id="@+id/ad"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="ca-app-pub_id"
        ads:loadAdOnCreate="true"/>

Кроме того, как упоминалось ранее, способность сопоставлять родителя зависит от рекламодателя.

Если рекламодатель предоставил соответствующие ресурсы, объявление будет растягиваться в соответствии с его родителем.

Например, объявление полного размера на Nexus 4:

enter image description here

Ответ 2

adView.setAdSize(AdSize.SMART_BANNER);

Ответ 3

Если вы посмотрите на список Размеры баннера Admob, вы увидите, что, поскольку вы устанавливаете высоту 50 дп, вы будете получать баннер размером 320 дп x 50 дп. В зависимости от того, какое устройство вы ищете, вы не сможете заполнить ширину рекламного места (например, Nexus 7). Поведение AdMob Smart Banners отличается тем, что оно немного чутко реагирует на различные конфигурации Android, регулируя его размер.

Ограничения в размере объявлений позволяют рекламодателям разрешать запуск одного и того же рекламного объявления на нескольких платформах без изменений.

Отметьте AdMob Documentation on Banners for Android за предложенный ими формат XML.

Ответ 4

Этот трюк сработал для меня.

  1. Поместите свой AdView в какой-то макет

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/container"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">

   <!-- Don't create AdView now. Programatically set AdView -->

</LinearLayout>
  1. В своей деятельности или фрагменте зайдите в родительский макет AdView (то есть линейный макет здесь) и добавьте addOnGlobalLayoutListener
LinearLayout layout = findViewById(R.id.container);
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
     @Override
     public void onGlobalLayout() {

        // load your ad here 
        AdView adView = new AdView(context);
        adView.setAdUnitId("YOUR_AD_UNIT");

        // create custom banner size with same aspect ratio as type banner
        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        int targetAdWidth = (int) (layout.getWidth() / displayMetrics.density);
        int targetAdHeight = targetAdWidth * 50 / 320;

        AdSize adSize = new AdSize(targetAdWidth, targetAdHeight);
        adView.setAdSize(adSize);

        layout.addView(adView);

        AdRequest.Builder adReq = new AdRequest.Builder();
        AdRequest adRequest = adReq.build();
        // add listener if required
        adView.setAdListener(adListener);
        adView.loadAd(adRequest);
        layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      }
});