Margin/padding in last Child in RecyclerView

前端 未结 9 974
醉话见心
醉话见心 2021-01-30 05:56

I\'m trying to add Padding/Margin Bottom in the last row and Padding/Margin Top in the first row. I can not do it in the item xml as it would affect all of my Children.

I

相关标签:
9条回答
  • 2021-01-30 06:21

    Add android:clipToPadding="false" and android:paddingBottom="65dp" in your recyclerview. If you are using fab menu button and actions on recycler view cell.

    <androidx.recyclerview.widget.RecyclerView
          android:id="@+id/dinner_recycler_view"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:clipToPadding="false"
          android:paddingBottom="65dp"/>
    
    0 讨论(0)
  • 2021-01-30 06:22
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_tpf"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipToPadding="false"
        android:paddingBottom="100dp" />
    

    Add android:clipToPadding="false" and android:paddingBottom="100dp" in your recyclerview.

    0 讨论(0)
  • 2021-01-30 06:25

    I have modified amazing answer @snachmsm answer for better and give you idea how to use properly

    public class SpacesItemDecoration extends DividerItemDecoration {
        private int space;
    
        public SpacesItemDecoration(Context clContext,int oriantation,int space) {
            super(clContext,oriantation);
            this.space = space;
        }
    
        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            super.getItemOffsets(outRect,view,parent,state);
            int position = parent.getChildAdapterPosition(view);
            boolean isLast = position == state.getItemCount()-1;
            if(isLast){
                outRect.bottom = space;
                outRect.top = 0; //don't forget about recycling...
            }
           /* if(position == 0){
                outRect.top = space;
                // don't recycle bottom if first item is also last
                // should keep bottom padding set above
                if(!isLast)
                    outRect.bottom = 0;
            }*/
        }
    }
    
    0 讨论(0)
  • 2021-01-30 06:33

    I use this in kotlin

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder(view), position: Int) {
        if (position == itemsList.lastIndex){
            val params = holder.itemView.layoutParams as FrameLayout.LayoutParams
            params.bottomMargin = 100
            holder.itemView.layoutParams = params
        }else{
            val params = holder.itemView.layoutParams as RecyclerView.LayoutParams
            params.bottomMargin = 0
            holder.itemView.layoutParams = params
        }
      //other codes ...
    }
    
    0 讨论(0)
  • 2021-01-30 06:35

    Instead of adding padding to both the top and bottom items, You can just add the padding to the top and bottom of your RecyclerView and set the clipToPadding attribute to false.

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:paddingTop="8dp"
        android:paddingBottom="8dp" />
    
    0 讨论(0)
  • 2021-01-30 06:40

    This issue is even easier to solve. You can apply necessary padding to the RecylerView itself and set clipToPadding to false, otherwise, the padding will chop off your scrolling area. Here is an example

    <android.support.v7.widget.RecyclerView
        android:padding="4dp"
        android:clipToPadding="false"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    See the padding will add 4dp on all sides including top and bottom. Then the clipToPadding parameter makes sure your child items are not chopped off. Now, add 4dp padding to all sides for your child items, and you are good to go. In total you get 8dp padding on sides and between items.

    0 讨论(0)
提交回复
热议问题