2016-03-01 5 views
4

У меня возникли проблемы с размещением Adview ниже RecyclerView. В настоящее время RecyclerView занимает остальную часть макета, а Adview не отображается. Ни одно из решений, которые я нашел в Интернете, не решило мою проблему. Обычно layout_weight или layout_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

Я переписал свой файл макета, The 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 будет выходить за пределы высоты экрана, то вы должны рассмотреть возможность разделения макета на разделы с андроида: layout_weight.

Update

<?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

Только что попробовал, но просмотр recycler не расширяется за 60dp. Я использую адаптер recycler, который может вызвать проблему. – M0rty

+0

Извините, измените андроид: layout_height = "60dp" на wrap_content в Linear_layout – Inducesmile

+0

Теперь просмотр recycler снова занимает остальную часть макета – M0rty

0

Попробуйте добавить атрибут к вашему RecyclerView android:clipToPadding="false".

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

Смежные вопросы