如何为最后一个元素的RecyclerView添加边距?

时间:2016-05-03 18:42:40

标签: android android-fragments layout

我使用RecyclerView的几个屏幕以及Fragment之上的小RecyclerView屏幕。当显示Fragment时,我想确保我可以滚动到RecyclerView的底部。 Fragment始终无法显示。如果我在RecyclerView上使用了边距,我需要在显示Fragment时动态删除并添加它们。我可以将余量添加到列表中的最后一项,但这也很复杂,如果我稍后加载更多的东西(即分页),我必须再次剥离这些边距。

如何动态添加或删除视图边距?有什么其他方法可以解决这个问题?

3 个答案:

答案 0 :(得分:35)

因此,如果您想在RecyclerView底部添加一些填充,可以将paddingBottom然后clipToPadding设置为false。这是一个例子

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

答案 1 :(得分:9)

您应该使用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 */;
        }
    }
}

答案 2 :(得分:1)

我在kotlin中使用它来给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 ...
}