Добрый День!
Возникла проблема, хочу добавить SMART_BANNER admob в главный активити.
Я делал приложение на основе макета Navigation Drawer Activity.
DrawerLayout находится в activity_main.xml
activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="UNIT_ID"/>
</androidx.drawerlayout.widget.DrawerLayout>
Если вставлять код баннера в явном виде, он загружается по середине, а не снизу.
Если добавлять банер в content_mailn.xml где содержится основной контент активити получается вот такая фигня.
content_mailn.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/app_bar_main"
android:id="@+id/content_main">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="UNIT_ID"/>
</RelativeLayout>
</RelativeLayout>
Я думал решить эту проблему програмным пэддингом.
Ads.javapublic class Ads {
public static void showBanner(final Activity activity) {
final AdView mAdView = (AdView) activity.findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
mAdView.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
super.onAdClosed();
//do something on ad is closed
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
//do something if ad failed to load
}
@Override
public void onAdLeftApplication() {
super.onAdLeftApplication();
}
@Override
public void onAdOpened() {
super.onAdOpened();
setupContentViewPadding(activity, mAdView.getHeight());
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
}
@Override
public void onAdClicked() {
super.onAdClicked();
}
@Override
public void onAdImpression() {
super.onAdImpression();
}
});
}
public static void setupContentViewPadding(Activity activity, int padding) {
View view = activity.findViewById(R.id.drawer_layout); // id был добавлен в этом слое на момент запуска
view.setPadding(view.getPaddingLeft(), view.getPaddingTop(), view.getPaddingRight(), padding);
}
}
Я хотел реализовать баннер так, что при его загрузке основной активити приподнимался вместе с fab кнопкой.
И тогда баннер не мешал бы ни контенту и fab'у.