所以这很棘手。我发现最接近这个工作的是这个答案的修改版本。我使最后一个项目的高度与我想要全宽且不可见的视图相同。然后我添加一个 itemdecoration 并将其绘制在列表中的最后一项应该可见的位置,如下所示:
class StickyDecoration (private val stickyView: View) : ItemDecoration() {
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
super.onDraw(c, parent, state)
// layout basically just gets drawn on the reserved space on top of the first view
stickyView.layout(parent.left, 0, parent.right, stickyView.measuredHeight)
for (i in 0 until parent.childCount) {
val view: View = parent.getChildAt(i)
if (parent.getChildAdapterPosition(view) == parent.childCount - 1) {
c.save()
val rectf = Rect()
view.getGlobalVisibleRect(rectf)
c.translate(0f, (rectf.top).toFloat())
stickyView.draw(c)
c.restore()
break
}
}
}
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.setEmpty()
}
}
这种方法的问题是,当最后一个上方的 recyclerview 中的项目从视图中消失时,我能想到的值rectf.top
或view.top
任何测量值都会发生飞跃并取代最后一个项目。
有谁知道使用 StaggeredGridLayoutManager 将全宽最后一项或页脚添加到 recyclerview 的方法?我知道它适用于 Gridlayout,但在我的情况下它不是一个选项。
或者,如果您知道一个值,它可以在屏幕上最后一个项目的正确位置而没有任何值跳转?
编辑:
我想要实现的更多细节。
它应该是一个 StaggeredGridLayout,在最后一项下方有一个页脚,它是全宽的,并与其余内容一起滚动。