2016-03-01 30 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

相關問題