Scroll RecyclerView to show selected item on top Scroll RecyclerView to show selected item on top android android

Scroll RecyclerView to show selected item on top


If you are using the LinearLayoutManager or Staggered GridLayoutManager, they each have a scrollToPositionWithOffset method that takes both the position and also the offset of the start of the item from the start of the RecyclerView, which seems like it would accomplish what you need (setting the offset to 0 should align with the top).

For instance:

//Scroll item 2 to 20 pixels from the toplinearLayoutManager.scrollToPositionWithOffset(2, 20);


If you looking for vertical LinearLayout Manager you can achieve smooth scrolling using a custom LinearSmoothScroller:

import android.content.Context;import android.graphics.PointF;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.LinearSmoothScroller;import android.support.v7.widget.RecyclerView;public class SnappingLinearLayoutManager extends LinearLayoutManager {    public SnappingLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {        super(context, orientation, reverseLayout);    }    @Override    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,                                       int position) {        RecyclerView.SmoothScroller smoothScroller = new TopSnappedSmoothScroller(recyclerView.getContext());        smoothScroller.setTargetPosition(position);        startSmoothScroll(smoothScroller);    }    private class TopSnappedSmoothScroller extends LinearSmoothScroller {        public TopSnappedSmoothScroller(Context context) {            super(context);        }        @Override        public PointF computeScrollVectorForPosition(int targetPosition) {            return SnappingLinearLayoutManager.this                    .computeScrollVectorForPosition(targetPosition);        }        @Override        protected int getVerticalSnapPreference() {            return SNAP_TO_START;        }    }}

use an instance of the layoutmanager in recycle view and then calling recyclerView.smoothScrollToPosition(pos); will smooth scroll to selected position to top of the recycler view


//Scroll item pos

linearLayoutManager.scrollToPositionWithOffset(pos, 0);