2016-03-01 62 views
4

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

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> 

回答

6

我改写了你的布局文件,该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> 

结果是显示

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

+0

刚刚尝试过,但回收站视图不会扩展过去60dp。我正在使用可能会导致问题的回收站适配器 – M0rty

+0

对不起,在Linear_layout中将android:layout_height =“60dp”更改为wrap_content – Inducesmile

+0

现在回收站视图再次占用布局的其余部分 – M0rty

0

尝试添加android:clipToPadding="false"属性您RecyclerView。

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" /> 
1

你可以做其他的方式,把AdView中对回收的底部,然后在适配器添加一个空ViewHolder这将永远是你的最后一个元素,你可以使用Adview的高度为空的布局。

2

我有一个视图需要在动态大小的回收站视图下。 这意味着视图会随着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> 
+0

漂亮简单的解决方案 – Theo