Android — Smart Banner — ширина недостаточна (всегда не хватает одного пикселя)

#android #smartbanner

#Android #smartbanner

Вопрос:

Я хочу добавить SMART_BANNER в нижней части моего приложения для Android (HTML5), макет определяется следующим образом

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:background="@color/default_header"
>
<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@ id/adView"
    android:background="@color/add_background"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"

    ads:adSize="SMART_BANNER"
    ads:adUnitId="@string/ad_banner">
</com.google.android.gms.ads.AdView>
<WebView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@ id/adView"
    android:background="@color/start_background"
    android:id="@ id/webView" /> 
 

Он отлично работает с «БАННЕРОМ», но в случае «SMART_BANNER» всегда с всегда на один пиксель меньше, и отображается следующая ошибка:

Без рекламы: недостаточно места для показа рекламы. Требуется 412×90 точек на дюйм, но имеет только 411×750 точек на дюйм. Без рекламы: недостаточно места для показа рекламы. Требуется 412×90 точек на дюйм, но имеет только 411×750 точек на дюйм.

Вопрос: Где я потерял один dp (с 412 по 411)?

Добавить информацию: я использую эмулятор (из Android Studio). Проблема с использованием возникает, если я использую «Pixel 2XL API 26» (СМАРТ-баннер не показан), но баннер отображается правильно, если я использую «Pixel API 28»

С наилучшими пожеланиями, Андреас

Комментарии:

1. У меня все еще есть проблема. Но, похоже, это зависит от конкретного устройства (в настоящее время я использую эмулятор). Проблема возникает с Pixel 2XL (здесь отображается только баннер (без смарт-баннера)), но отлично работает с ‘Pixel’. К сожалению, у меня нет Pixel 2XL. Может ли проблема быть вызвана эмулятором?

Ответ №1:

Вам нужно установить ширину wrap_content объявления вместо match_parent . По крайней мере, это то, что я делаю со своими советами, и это всегда работает, независимо от того, БАННЕР это или SMART_BANNER.

[Не по теме] Я также заметил, что в вашем WebView вы написали android:layout_above="@ id/adView" . В этом случае вам не нужно объявлять новую ссылку на AdView, поскольку она уже была объявлена ранее. Так что, если вы просто поместите @id/adView вместо @ id него, он все равно будет работать.

Также попробуйте удалить эти отступы (даже если для них установлено значение 0) как из вашего макета, так и из AdView. Насколько я вижу, в них нет необходимости.

Комментарии:

1. У меня все еще есть проблема. Но, похоже, это зависит от конкретного устройства (в настоящее время я использую эмулятор). Проблема возникает с Pixel 2XL (здесь отображается только баннер (без смарт-баннера)), но отлично работает с ‘Pixel’. К сожалению, у меня нет Pixel 2XL. Может ли проблема быть вызвана эмулятором?

2. Да, я могу гарантировать вам 99%, что это как-то связано с эмулятором, потому что поведение AdView, как правило, одно с эмуляторами, а другое с реальными устройствами. Вы можете заметить это изменение поведения, запустив приложение на эмуляторе, в AdView всегда будет отображаться «Тестовое объявление», даже если вы используете реальный идентификатор рекламного блока

Ответ №2:

вы должны установить ширину и высоту следующим образом :

   <com.google.android.gms.ads.AdView
    android:id="@ id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="@string/admob_unitid_web">