Недостаточно места для показа рекламы с layout-hdpi

Я создал дополнительный портретный макет для таких устройств, как Samsung S3 Mini и Google Nexus S, ширина которых составляет 480 пикселей в портретной ориентации.

Чтобы добавить этот клонированный макет, я использовал Android Studio для Создать другое..., затем выбрал Плотность и выбрал Высокая плотность, чтобы предоставить мне копию макета внутри новой папки res/layout-hdpi - макет в основном отлично работает в эмуляторе, когда я использую AVD, созданный для размера экрана 480 x 800 (вещи появляются и находятся там, где вы ожидаете).

Однако моя реклама AdMob отлично работает в других макетах, например. layout-sw360dp-port и layout-sw600dp-port - не отображаются. LogCat указывает Not enough space to show ad. Needs 480x75, but only has 432x570.

Это частично имеет смысл для меня — поскольку RelativeLayout, в котором находится com.google.android.gms.ads.AdView, имеет как android:paddingLeft="@dimen/activity_horizontal_margin", так и android:paddingRight="@dimen/activity_horizontal_margin", установленные в соответствии с рекомендациями по дизайну Android, которые должны быть около 24 пикселей каждый.

Таким образом, имеет смысл, что доступное горизонтальное пространство составляет не 480 (ширина устройства), а скорее 432 (ширина RelativeLayout после заполнения).

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

XML для объявления выглядит следующим образом:

<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adUnitId="@string/adUNITID"
    ads:adSize="BANNER"
    android:id="@+id/adView"
    android:layout_alignParentStart="false"
    android:layout_alignParentEnd="false"
    android:layout_alignParentBottom="true" />

Документация подразумевает, что для объявления типа BANNER должно требоваться «320x50 пикселей, не зависящих от плотности», я не понимаю, почему в LogCat говорится, что 480 требуется.

Поскольку объявление с BANNER не показывалось, я попробовал SMART_BANNER (который представляет собой «баннер динамического размера во всю ширину»), и это тоже не удалось показать (с тем же сообщением в LogCat).

Я пропустил что-то довольно очевидное здесь? Я не понимаю, почему обычное объявление размером BANNER (которое, как мне кажется, должно легко вписаться в доступное место) говорит, что оно не может отображаться на таких устройствах, как Samsung S3 Mini или Google Nexus S. Должен ли я удалить это? прокладка, которая есть у RelativeLayout? Это хорошая идея?


person Hippogriff    schedule 28.02.2014    source источник
comment
Я бы добавил, что приложение с одиночным макетом, обрабатывающим все разрешения и оба ориентации, показывает рекламу на всех. я> устройства. Итак, проблема only у меня возникает, когда я специально использую макет layout-hdpi.   -  person Hippogriff    schedule 28.02.2014


Ответы (1)


В конце концов мне удалось это сделать, создав LinearLayout верхнего уровня с 2 элементами RelativeLayout внутри. Один RelativeLayout для компонентов пользовательского интерфейса может сохранить свой отступ, как это предлагается в руководстве по дизайну Android (и то, что выглядит красиво). Другой RelativeLayout не имеет отступов, поэтому реклама помещается внутри (ранее он жаловался, что ему нужно 480 пикселей на экране).

Пользовательский интерфейс RelativeLayout имеет android:layout_weight="1", а реклама RelativeLayout имеет android:layout_weight="7.2", что, похоже, работает для устройств с экранами 480 на 800 (hdpi).

Для меня это похоже на взлом, но это работает.

person Hippogriff    schedule 28.02.2014