AdMob, как определить, когда был выделен размер SMART_BANNER - PullRequest
0 голосов
/ 30 октября 2018

У меня есть активность с макетом, который включает AdView с ads:adSize="SMART_BANNER". Он находится внизу экрана, под пользовательским WebView. Теперь WebView имеет контент, который отображается на основе доступного ему пространства (размеры в пикселях). Поэтому, прежде чем рендерить содержимое WebView, мне нужно знать, какой размер (в частности, высоту) будет принимать SMART_BANNER, и что остается для WebView. Начиная с здесь указывается, что высота смарт-баннера может быть любой из 32dp, 50dp и 90dp.

.

Насколько я понимаю, мне нужно подождать, пока будет решен формат AdView, прежде чем я смогу отрендерить WebView. Как я могу это сделать? Может быть, установив AdListener ? Однако методы из AdListener, по-видимому, позволяют мне определить, например, когда объявление было загружено ... Я не хочу ждать, пока оно будет загружено, я только хочу дождаться фактического размера объявления, которое будет выделено.

Я знаю, что могу избежать всего этого, установив AdView на BANNER с фиксированной высотой 50dp, и это действительно работает нормально. Но я бы предпочел SMART_BANNER в основном потому, что высота может уменьшиться до 32dp в альбомном режиме на небольшом экране телефона, оставляя больше места для реального контента.

1 Ответ

0 голосов
/ 30 октября 2018

AdView не имеет API для извлечения его размера до фактической загрузки объявления, а класс равен final, поэтому вы также не можете реализовать его самостоятельно.

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

Другой альтернативой является использование статических значений (из документации ), выбранных динамически в соответствии с высотой экрана устройства:

32 дп где высота ≤ 400 дп

50 dp , где высота> 400 dp и ≤ 720 dp

90 dp где высота> 720 dp

(вы можете проверить этот ответ для определения высоты экрана и этот для преобразования между значениями px и dp)

Например, вы можете использовать что-то подобное в вашем Activity:

private int getSmartBannerHeightDp() {
    DisplayMetrics dm = getResources().getDisplayMetrics();
    float screenHeightDp = dm.heightPixels / dm.density;

    return screenHeightDp > 720 ? 90 : screenHeightDp > 400 ? 50 : 32;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...