Поскольку Admob не резервирует высоту баннера перед загрузкой, похоже, решение заключается в том, чтобы сделать это вручную.
Согласно руководству Admob для баннерной рекламы:
Смарт-баннеры - это рекламные блоки, которые будут отображать рекламные баннеры на весь экран на любом экране на разных устройствах в любой ориентации. Смарт-баннеры помогают справляться с растущей фрагментацией экрана на разных устройствах, «умно» определяя ширину телефона в его текущей ориентации и заставляя рекламу просматривать этот размер.
Доступны три высоты рекламы (в dp, независимый от плотности пиксель):
32 - используется, когда высота экрана устройства меньше 400
50 - используется, когда высота экрана устройства составляет от 400 до 720
90 - используется, когда высота экрана устройства превышает 720
Решение 1
Вы знаете высоту, используя метод ниже:
public static int getAdViewHeightInDP(Activity activity) {
int adHeight = 0;
int screenHeightInDP = getScreenHeightInDP(activity);
if (screenHeightInDP < 400)
adHeight = 32;
else if (screenHeightInDP >= 400 && screenHeightInDP <= 720)
adHeight = 50;
else
adHeight = 90;
return adHeight;
}
public static int getScreenHeightInDP(Activity activity) {
DisplayMetrics displayMetrics = ((Context) activity).getResources().getDisplayMetrics();
float screenHeightInDP = displayMetrics.heightPixels / displayMetrics.density;
return Math.round(screenHeightInDP);
}
В вашем "banner_container" удалите:
android:visibility="gone"
Изменить фрагмент "onCreateView":
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
adView = new AdView(getActivity());
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
LinearLayout mBannerContainer = rootView.findViewById(R.id.banner_container);
mBannerContainer.setLayoutParams(
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
getAdViewHeightInDP(this.getActivity())
));
)
mBannerContainer.addView(adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build();
adView.loadAd(adRequest);
...
}
Решение 2
Вместо использования методов "getAdViewHeightInDP" и "getScreenHeightInDP" используется метод "AdSize.SMART_BANNER.getHeightInPixels (this)".
В вашем "banner_container" удалите:
android:visibility="gone"
Изменить фрагмент "onCreateView":
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
adView = new AdView(getActivity());
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
LinearLayout mBannerContainer = rootView.findViewById(R.id.banner_container);
mBannerContainer.setLayoutParams(
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
AdSize.SMART_BANNER.getHeightInPixels(this.getActivity())
));
)
mBannerContainer.addView(adView);
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build();
adView.loadAd(adRequest);
...
}