How to place AdView below the RecyclerView? Please

2019-03-04 03:25发布

问题:

I'm developing an app in which some data is getting loaded from Firebase and is shown in the RecyclerView.

What I want is I want to show the AdView below the RecyclerView and for that I have done this:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/recyclerView_parentLayout"
    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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.abc.xyz.MainActivity"
    tools:showIn="@layout/app_bar_main"
    xmlns:ads="http://schemas.android.com/apk/res-auto">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipToPadding="false"
        android:scrollbars="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.v7.widget.CardView
        android:id="@+id/card_ads"
        android:layout_below="@id/recycler_view"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:contentPaddingBottom="2dp"
        app:cardElevation="2dp"
        app:cardUseCompatPadding="true" >

            <com.google.android.gms.ads.NativeExpressAdView
                android:id="@+id/adView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:layout_alignParentBottom="true"
                ads:adUnitId="ca-app-pub-***********/*********"
                ads:adSize="280x80">
            </com.google.android.gms.ads.NativeExpressAdView>

    </android.support.v7.widget.CardView>

</RelativeLayout>

The problem is that this layout is showing no ads at the bottom and the recyclerview is covering the whole area and the ads are getting covered by it.

Here's the screenshot (the recyclerview has been scrolled to the last and there is no ad there):

Please let me know how can I place the ads just below the RecyclerView or where the recyclerview ends.

回答1:

You should use LinearLayout instead of RelativeLayout. In LinearLayout put ad at the bottom of the screen and let it occupy it's space and set layout_weight to your RecyclerView.

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        ... />

    <android.support.v7.widget.CardView
        android:id="@+id/card_ads"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ... >

        <com.google.android.gms.ads.NativeExpressAdView
            android:id="@+id/adView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ... />

    </android.support.v7.widget.CardView>

</LinearLayout>

And one more thing, don't set layout_height of AdView to match_parent, use wrap_content instead.



回答2:

Try to put your RecyclerView inside other layout, or just set layout_above="@id/card_ads"

I think the main problem is that you set in card_ads layout_below, but not tell recyclerview that it should be over the card_ads

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/recyclerView_parentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.abc.xyz.MainActivity"
    tools:showIn="@layout/app_bar_main">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="card_ads"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:scrollbars="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
    </LinearLayout>

    <android.support.v7.widget.CardView
        android:id="@+id/card_ads"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/recycler_view"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        app:cardElevation="2dp"
        app:cardUseCompatPadding="true"
        app:contentPaddingBottom="2dp">

        <com.google.android.gms.ads.NativeExpressAdView
            android:id="@+id/adView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_centerInParent="true"
            ads:adSize="280x80"
            ads:adUnitId="ca-app-pub-***********/*********">
        </com.google.android.gms.ads.NativeExpressAdView>

    </android.support.v7.widget.CardView>

</RelativeLayout>

I've add Admob on my App, you can check at Github

Edit:

I put match parent, see if it works

<android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipToPadding="false"
            android:scrollbars="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>


回答3:

Add framelayout as a main layout .Try this code .Put your adView insted of button .
<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/recyclerView_parentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"


    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipToPadding="false"
            android:scrollbars="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <android.support.v7.widget.CardView
            android:id="@+id/card_ads"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/recycler_view"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="10dp"
            app:cardElevation="2dp"
            app:cardUseCompatPadding="true"
            app:contentPaddingBottom="2dp">

            <com.google.android.gms.ads.NativeExpressAdView
                android:id="@+id/adView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:layout_centerInParent="true"
                ads:adSize="280x80"
                ads:adUnitId="ca-app-pub-***********/*********">
            </com.google.android.gms.ads.NativeExpressAdView>

        </android.support.v7.widget.CardView>
    </LinearLayout>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"/>
</FrameLayout>


回答4:

Add this to your XML

 <android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/adView"
    android:scrollbars="vertical">
</android.support.v7.widget.RecyclerView>