How to add margins to a RecyclerView for the last element?

与世无争的帅哥 提交于 2019-12-08 14:47:02

问题


I several screens that use RecyclerView and also has a small Fragment that is on top of the RecyclerView. When that Fragment is displayed I'd like to make sure I can scroll to the bottom of the RecyclerView. The Fragment isn't always displayed. If I used margins on the RecyclerView I'd need to dynamically remove and add them when the Fragment is displayed. I could add margins onto the last item in the list, but that is also complicated and if I load more things later (ie pagination) I'd have to strip off those margins again.

How would I dynamically add or remove margins to the view? What are some other options to solve this?


回答1:


So if you want to add some padding at the bottom of your RecyclerView you can set the paddingBottom and then clipToPadding to false. Here's an example

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:paddingBottom="100dp" />



回答2:


You should use the Item Decorator.

public class MyItemDecoration extends RecyclerView.ItemDecoration {

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        // only for the last one
        if (parent.getChildAdapterPosition(view) == parent.getAdapter().getItemCount() - 1) {
            outRect.top = /* set your margin here */;
        }
    }
}



回答3:


I use this in kotlin for give margin to last index of RecyclerView

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 ...
}


来源:https://stackoverflow.com/questions/37011982/how-to-add-margins-to-a-recyclerview-for-the-last-element

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!