Перейти к содержанию
Fire Monkey от А до Я
  • 0

Исправление отображения Smart Banner, Android


Alex7wrt

Вопрос

Обнаружил, что на некоторых телефонах с вытянутым экраном не отображается Smart Banner (TBannerAD.Size = Auto). Оказалось, что причиной тому неверный расчет высоты баннера в исходниках FMX.Advertising.Android. 

Может быть, эта информация кому-нибудь поможет

 

В документации Android высота баннера должна вычисляться так:

1.PNG.7deb908fcd7d73c79db594430f070b6d.PNG

Тогда как в коде FMX.Advertising.Android она вычисляется в процедуре UpdateControlMetrics следующим образом:

const
  AdHeightPortrait = 90;
  AdHeightLandscape = 90;
  AdHeightPhonePortrait = 50;
  AdHeightPhoneLandscape = 32;
  AndroidSW600DP = 600;
  AndroidSW600DPLandscape = 552;
  AdMobBannerHeight = 50;
  AdMobFullBannerHeight = 60;
  AdMobLeaderboardHeight = 90;
begin
  if (FAdControl <> nil) and not Assigned(FAdControl.OnResize) then
  begin
    case FAdControl.AdSize of
      TBannerAdSize.Auto:
        begin
          if Screen.Size.Height > Screen.Size.Width then
            if Screen.Size.Width < AndroidSW600DP then
              FAdControl.Height := AdHeightPhonePortrait
            else
              FAdControl.Height := AdHeightPortrait
          else
            if Screen.Size.Height < AndroidSW600DPLandscape then
              FAdControl.Height := AdHeightPhoneLandscape
            else
              FAdControl.Height := AdHeightLandscape;
        end;

Также, учитывая, что на вытянутых экранах (по крайней мере на тех устройствах, на которых я тестил), Screen.Width и Screen.Height далеко не всегда дают верные значения, то более правильный код процедуры TAndroidBannerAd.UpdateControlMetrics будет таким:

procedure TAndroidBannerAd.UpdateControlMetrics;
var
  Frame: TRectF;
  Form: TCommonCustomForm;
  Disp: JDisplayMetrics;
  Window: JWindow;
  h: integer;
const
  AdHeightLandscape = 90;
  AdHeightPhoneLandscape = 32;
  AndroidSW600DP = 600;
  AndroidSW600DPLandscape = 552;
  AdMobBannerHeight = 50;
  AdMobFullBannerHeight = 60;
  AdMobLeaderboardHeight = 90;
begin
  if (FAdControl <> nil) and not Assigned(FAdControl.OnResize) then
  begin

    Disp := TJDisplayMetrics.Create;
    Window:=TJWindow.Wrap((MainActivity.getWindow as ILocalObject).GetObjectID);
    Window.getWindowManager.getDefaultDisplay.getRealMetrics(disp);
    h:=round(Disp.heightPixels/Disp.density);


    case FAdControl.AdSize of
      TBannerAdSize.Auto:
        begin
          if Screen.Size.Height > Screen.Size.Width then begin
            if h <= 400 then FAdControl.Height := 32
            else if (h>400) and (h<=720) then FAdControl.Height:=50
            else FAdControl.Height := 90
          end
          else
            if Screen.Size.Height < AndroidSW600DPLandscape then
              FAdControl.Height := AdHeightPhoneLandscape
            else
              FAdControl.Height := AdHeightLandscape;
        end;
      TBannerAdSize.Small:
        FAdControl.Height := AdMobBannerHeight;
      TBannerAdSize.Medium:
        FAdControl.Height := AdMobFullBannerHeight;
      TBannerAdSize.Large:
        FAdControl.Height := AdMobLeaderboardHeight;
    end;

    if Screen.ActiveForm <> nil then
      Form := Screen.ActiveForm
    else if Application.MainForm <> nil then
      Form := Application.MainForm
    else
      Form := nil;
    if Form <> nil then
    begin
      Frame := WindowHandleToPlatform(Form.Handle).Bounds;
      FAdControl.Width := Round(Frame.Width);
    end;
  end;
end;

 

Изменено пользователем Alex7wrt
Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...