无法在RecyclerView下方放置视图

时间:2016-03-01 01:22:32

标签: android xml android-recyclerview

我将Adview置于RecyclerView以下时遇到问题。目前,RecyclerView占据了布局的其余部分,Adview未显示。我在网上找到的解决方案都没有解决我的问题。通常layout_weightlayout_below解决问题,但在这种情况下不是。

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#7c7c7c"
        android:focusable="true"
        android:focusableInTouchMode="true">


        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/relContainer"
            android:background="@drawable/bordershadow2"
            android:paddingBottom="17dp"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="10dp" />


        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/recycler_view"
            ads:adSize="BANNER"
            ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
        </com.google.android.gms.ads.AdView>

        <RelativeLayout
            android:id="@+id/relContainer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/bordershadow"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin">

           <TableLayout
                android:id="@+id/purchaseTableLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="7dp"
                android:paddingTop="7dp"
                android:layout_alignParentTop="true"
                android:stretchColumns="0,1,2">

                <TableRow
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:weightSum="3">

                    <TextView
                        android:id="@+id/textView1"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center_vertical"
                        android:paddingLeft="2dp"
                        android:singleLine="true"
                        android:textColor="#000"
                        android:textSize="24sp"
                        android:textStyle="bold" />

                    <TextView
                        android:id="@+id/textView2"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center_vertical"
                        android:paddingLeft="2dp"
                        android:singleLine="true"
                        android:textColor="#000"
                        android:textSize="24sp"
                        android:textStyle="bold" />

                    <Spinner
                        android:id="@+id/typeSpinner"
                        style="style/Theme.Material"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center_vertical"
                        android:entries="@array/type_array"
                        android:textSize="@dimen/title_size" />
                </TableRow>
            </TableLayout>

            <EditText
                android:id="@+id/searchEditText"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_below="@+id/purchaseTableLayout"
                android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'() "
                android:hint="Search"
                android:imeOptions="actionDone"
                android:singleLine="true" />

            <TableLayout
                android:id="@+id/tableLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/searchEditText"
                android:paddingBottom="7dp"
                android:paddingTop="7dp"
                android:stretchColumns="0,1,2">

                <TableRow
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:weightSum="3.0">

                    <Spinner
                        android:id="@+id/sortRaceSpinner"
                        style="style/Theme.Material"
                        android:paddingTop="5dp"
                        android:paddingBottom="10dp"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1.0"
                        android:entries="@array/sort_race_array"
                        android:textSize="@dimen/title_size" />

                    <Spinner
                        android:id="@+id/sortAffinitySpinner"
                        style="style/Theme.Material"
                        android:paddingTop="5dp"
                        android:paddingBottom="10dp"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1.0"
                        android:entries="@array/sort_affinity_array"
                        android:textSize="@dimen/title_size" />

                    <Spinner
                        android:id="@+id/sortSpinner"
                        style="style/Theme.Material"
                        android:paddingTop="5dp"
                        android:paddingBottom="10dp"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="1.0"
                        android:entries="@array/sort_array"
                        android:textSize="@dimen/title_size" />
                </TableRow>
            </TableLayout>
        </RelativeLayout>
    </RelativeLayout>
</RelativeLayout>

4 个答案:

答案 0 :(得分:7)

我重写了你的布局文件,recycleview包含在linearlayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<LinearLayout
   android:id="@+id/wrapper"
   android:layout_width="match_parent"
   android:layout_height="60dp"
   android:layout_alignParentTop="true"
   android:layout_centerHorizontal="true"
   android:layout_marginBottom="12dp"
   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:paddingBottom="20dp"
       android:paddingLeft="@dimen/activity_horizontal_margin"
       android:paddingRight="@dimen/activity_horizontal_margin"
       android:paddingTop="10dp" />

   </LinearLayout>

<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:background="#000000"
    android:layout_height="60dp"
    android:layout_below="@+id/wrapper"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>


<RelativeLayout
    android:id="@+id/relContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/adView"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <TableLayout
        android:id="@+id/purchaseTableLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="7dp"
        android:paddingTop="7dp"
        android:layout_alignParentTop="true"
        android:stretchColumns="0,1,2">

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weightSum="3">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:paddingLeft="2dp"
                android:singleLine="true"
                android:textColor="#000"
                android:textSize="24sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:paddingLeft="2dp"
                android:singleLine="true"
                android:textColor="#000"
                android:textSize="24sp"
                android:textStyle="bold" />

            <Spinner
                android:id="@+id/typeSpinner"
                style="style/Theme.Material"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical" />
        </TableRow>
    </TableLayout>

    <EditText
        android:id="@+id/searchEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/purchaseTableLayout"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'() "
        android:hint="Search"
        android:imeOptions="actionDone"
        android:singleLine="true" />

    <TableLayout
        android:id="@+id/tableLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/searchEditText"
        android:paddingBottom="7dp"
        android:paddingTop="7dp"
        android:stretchColumns="0,1,2">

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weightSum="3.0">

            <Spinner
                android:id="@+id/sortRaceSpinner"
                style="style/Theme.Material"
                android:paddingTop="5dp"
                android:paddingBottom="10dp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.0"/>

            <Spinner
                android:id="@+id/sortAffinitySpinner"
                style="style/Theme.Material"
                android:paddingTop="5dp"
                android:paddingBottom="10dp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.0"/>

            <Spinner
                android:id="@+id/sortSpinner"
                style="style/Theme.Material"
                android:paddingTop="5dp"
                android:paddingBottom="10dp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.0" />
        </TableRow>
    </TableLayout>
</RelativeLayout>

结果如show

enter image description here

如果您的recycleview内容将超出显示高度,那么您应该考虑将您的布局划分为android:layout_weight的分区。

更新

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:id="@+id/relContainer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <TableLayout
        android:id="@+id/purchaseTableLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="7dp"
        android:paddingTop="7dp"
        android:layout_alignParentTop="true"
        android:stretchColumns="0,1,2">

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weightSum="3">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:paddingLeft="2dp"
                android:singleLine="true"
                android:textColor="#000"
                android:textSize="24sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:paddingLeft="2dp"
                android:singleLine="true"
                android:textColor="#000"
                android:textSize="24sp"
                android:textStyle="bold" />

            <Spinner
                android:id="@+id/typeSpinner"
                style="style/Theme.Material"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical" />
        </TableRow>
    </TableLayout>

    <EditText
        android:id="@+id/searchEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/purchaseTableLayout"
        android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'() "
        android:hint="Search"
        android:imeOptions="actionDone"
        android:singleLine="true" />

    <TableLayout
        android:id="@+id/tableLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/searchEditText"
        android:paddingBottom="7dp"
        android:paddingTop="7dp"
        android:stretchColumns="0,1,2">

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weightSum="3.0">

            <Spinner
                android:id="@+id/sortRaceSpinner"
                style="style/Theme.Material"
                android:paddingTop="5dp"
                android:paddingBottom="10dp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.0"/>

            <Spinner
                android:id="@+id/sortAffinitySpinner"
                style="style/Theme.Material"
                android:paddingTop="5dp"
                android:paddingBottom="10dp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.0"/>

            <Spinner
                android:id="@+id/sortSpinner"
                style="style/Theme.Material"
                android:paddingTop="5dp"
                android:paddingBottom="10dp"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1.0" />
        </TableRow>
    </TableLayout>
</RelativeLayout>

<LinearLayout
    android:id="@+id/wrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/relContainer"
    android:background="@color/colorPrimary"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp" />

</LinearLayout>

<LinearLayout
    android:id="@+id/wrappers"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_alignParentBottom="true"
    android:orientation="vertical">

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
    </com.google.android.gms.ads.AdView>

</LinearLayout>

enter image description here

答案 1 :(得分:6)

我有一个视图需要在具有动态大小的回收器视图下。 意味着视图假设随着RecyclerView的增长而向下移动。

我的解决方案是将paddingBottom添加到RecyclerView,然后将负marginTop添加到视图的相同值,它完美地运行。

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

    <android.support.v7.widget.RecyclerView
        android:paddingBottom="48dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

        <TextView
            android:layout_marginTop="-48dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />
</LinearLayout>

答案 2 :(得分:2)

您可以采用其他方式,将Adview放在底部的回收器上,然后在适配器中添加一个空的ViewHolder,它始终是您的最后一个元素,您可以使用Adview高度的空布局。

答案 3 :(得分:1)

尝试将android:clipToPadding="false"属性添加到R​​ecyclerView。

official documentation说,关于clipToPadding:

  

设置此ViewGroup是否将其子项剪辑为其填充和   如果填充,则将任何EdgeEffect调整大小(但不剪切)到填充区域   在场。

     

默认情况下,子项被剪裁为其父级的填充   ViewGroup中。仅当填充为时,才会启用此剪切行为   非零的。

您的XML布局最终将成为:

<强> layout.xml

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/relContainer"
    android:background="@drawable/bordershadow2"
    android:clipToPadding="false"
    android:paddingBottom="20dp"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="10dp" />