RecyclerView 滚动定位至目标 Item 并对齐顶部

关于使用LinearLayoutManager的RecyclerView需要滚动定位到指定Item,基于之前对ListView的使用,我们很容易就从RecyclerView中找到这样的方法。

scrollToPosition(int position)

smoothScrollToPosition(int position)

但是使用过的同学都会发现它存在着这么一个问题:当你要定位的Item已经完全显示时,RecyclerView并不会产生滚动行为;当你要定位的Item并不完全显示或在显示区域以外时,RecyclerView虽然会产生滚动行为,但是只要Item完全显示后滚动行为就会停止,即Item有可能会在RecyclerView显示区域的顶部,也有可能在显示区域的底部。

这样一来,面对“需要滚动定位到Item时,Item对齐到顶部”的需求,就很尴尬了。 😯

这尴尬事刚好我前几天就碰上了,在网上一搜发现很多文章介绍的方法都是想方设法地计算目标Item离当前位置的距离,用上了scrollBy(int x, int y)smoothScrollBy(int dx, int dy),还要监听下滚动事件作最后的修正处理什么的。

我也确实按这些个方法试了下,最终效果不佳,尤其是我的每一个Item的高度是不固定的,甚至会出现Item高度大于RecyclerView高度的情况,也就是RecyclerView的显示区不能完全展示这个Item。所以还是自己动手丰衣足食啊~~ :mrgreen: Demo扔在最后~~ 继续阅读“RecyclerView 滚动定位至目标 Item 并对齐顶部”