Is there a way to programmatically scroll to the top of a NestedScrollView
by also triggering the scroll events for the parent? smoothScrollTo(x, y)
doesn't delegate the scroll events to the NestedScrollingParent
.

- 3,614
- 4
- 34
- 56

- 1,799
- 1
- 13
- 18
-
Clarify your question more, do you mean to say when the NestedScrollView is inside the coordinator layout? – Pier Betos Jan 08 '16 at 08:05
-
to programmatically scroll to any point, check https://stackoverflow.com/questions/52083678/nestedscrollviews-smoothscrollto-behaves-weird – user1506104 Sep 10 '18 at 17:04
14 Answers
NestedScrollView.scrollTo(0, 0);

- 13,761
- 19
- 49
- 78
-
7I am telling your to use `NestedScrollView.scrollTo(0, 0);` to scroll to the top of the `NestedScrollView`. You are welcome. – SilentKnight Jul 10 '15 at 10:48
-
-
@Override public void onStart() { super.onStart(); scroll.post(() -> scroll.scrollTo(0, 0)); } – Guilherme Simão Couto May 28 '21 at 19:43
-
I managed to do it (animated scrolling):
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
behavior.onNestedFling(coordinatorLayout, appBarLayout, null, 0, 10000, true);
}
where 10000
is the velocity in y-direction.

- 1,799
- 1
- 13
- 18
-
1if you only like to scroll to hide the appbarlayout like in my case you could do `behavior.onNestedFling(coordinator, appbar, null, 0, -params.height, true);` to reverse it `behavior.onNestedFling(coordinator, appbar, null, 0, params.height, true);` – Kosh Apr 28 '16 at 14:45
-
3
-
When the AppBarLayout is expanded, simulating the nested fling will collapse it (which is great), but will not make the NestedScrollView scroll down at the same time... – Raphael Royer-Rivard Nov 19 '16 at 20:06
-
Plus, when the AppBarLayout is fully collapsed, using a negative y velocity value will not expand it. – Raphael Royer-Rivard Nov 19 '16 at 21:15
Another way to smooth scroll NestedScrollView
to all the way up or down is using fullScroll(direct)
function
nestedScrollView.fullScroll(View.FOCUS_DOWN);
nestedScrollView.fullScroll(View.FOCUS_UP);

- 15,588
- 14
- 58
- 89
-
fullScroll(View.FOCUS_UP) hidden appbar not coming out. Any Idea – Shabbir Dhangot Jan 24 '17 at 13:43
-
@Sabbir Dhangot did you layout your `NestedScrollView` below the appbar? – MeLean Aug 17 '18 at 08:29
-
I have one question I can see that fullScroll receives a view. if I want to scroll to a certain textview, editext, or recyclerView will it scroll to it? – Felipe Franco Sep 11 '20 at 17:29
Nothing worked for me, and I don't really know why this worked, but here is my solution and problem.
When adding recycler view to a nested scroll view, it showed recycler view on screen when getting to that activity. In order to scroll all the way up, I had to use this:
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.details_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setItemAnimator(new DefaultItemAnimator());
ProductDescriptionAdapter adapter = new ProductDescriptionAdapter(this);
adapter.setData(mProduct.getDetails());
recyclerView.setAdapter(adapter);
NestedScrollView scrollView = (NestedScrollView) findViewById(R.id.scroll);
scrollView.getParent().requestChildFocus(scrollView, scrollView);

- 132,869
- 46
- 340
- 423

- 1,540
- 2
- 21
- 30
-
5
-
11If anyone's problem is that the recyclerview inside the nested scroll view is already scrolled half way when entering the activity, try setting the top most element under root of XML to have the following property android:focusableInTouchMode="true" – user1025013 Mar 21 '18 at 20:01
-
1This solution works perfectly where as **scrollView.scrollTo(0,0);** does not work at all. – taranjeetsapra Jun 14 '18 at 08:37
-
4This worked : `scrollView.getParent().requestChildFocus(scrollView, scrollView);` – Rajeev Sahu Sep 17 '18 at 08:50
I also faced similar kind scenario. In my case when I scroll down to end, FAB button should be appears and when user tap on that FAB button should go to the top of the page.
For that I added @SilentKnight answer NestedScrollView.scrollTo(0, 0);
For go to the top but which is not enough for smooth animation for scroll up.
For smooth animation I have used @Sharj answer which is NestedScrollView.fullScroll(View.FOCUS_UP);
But then my AppBar is not visible there fore I have to expanded the AppBar as following appBarLayout1.setExpanded(true)
.
So using these three I can able smoothly go to top of the page.
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);
appBarLayout1.setExpanded(true);

- 421
- 5
- 6
-
6
-
Thank you! This is the most correct answer, especially when using appbarlayout – demogorgorn Mar 29 '20 at 11:28
Some time NestedScrollView.scrollTo(0, 0);
and scrollview.pageScroll(View.FOCUS_UP);
does not work
At that you need to use fling()
and smoothScrollTo()
together
SAMPLE CODE
nestedScrollView.post {
nestedScrollView.fling(0)
nestedScrollView.smoothScrollTo(0, 0)
}

- 67,701
- 16
- 123
- 163
You can use this for smooth scroll.
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.smoothScrollTo(0,0);
OR for normal scroll
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.scrollTo(0,0);

- 4,803
- 3
- 29
- 38
You could easily fake the scrolling on NestedScrollView level. You basically tell the coordinatorLayout that you just scrolled by the height of the toolbar.
NestedScrollView nestedScrollView = (NestedScrollView) getActivity().findViewById(R.id.your_nested_scroll_view);
int toolbarHeight = getActivity().findViewById(R.id.toolbar).getHeight();
nestedScrollView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
nestedScrollView.dispatchNestedPreScroll(0, toolbarHeight, null, null);
nestedScrollView.dispatchNestedScroll(0, 0, 0, 0, new int[]{0, -toolbarHeight});
nestedScrollView.scrollTo(0, nestedScrollView.getBottom());

- 2,447
- 2
- 27
- 37

- 706
- 7
- 21
-
The only answer that worked for me! I needed to scroll up in coordinator layout (so both nestedScrollView and collapsibleToolbar). I used existing code but toolbarHeight changed to Integer.MIN_VALUE and -toolbarHeight to Integer.MAX_VALUE (as I need opposite dirrection). And then I call appBarLayout.setExpanded(true, true); Thank you! – Viktoriia Chebotar Nov 28 '18 at 13:29
I tried all the above responses, nothin seemed to work but I only needed a postDelayed.
scrollview.postDelayed(new Runnable() {
@Override
public void run() {
listener.setAppBarExpanded(false, true); //appbar.setExpanded(expanded, animated);
scrollview.fullScroll(View.FOCUS_DOWN);
}
}, 400);

- 1,617
- 19
- 16
Add the line two times .worked for me
nestedScrollView.fullScroll(View.FOCUS_UP);
nestedScrollView.fullScroll(View.FOCUS_UP);

- 125
- 2
- 4
Use the View.scollTo(int x, int y) instead to scroll to the top.
findViewById({your NestedScrollView resource id}).scrollTo(0, 0);

- 21
- 3
I had problem with NestedScrollView when I used than with RecyclerView . This code worked for me: nestedScrollView!!.getParent().requestChildFocus(nestedScrollView, nestedScrollView);
val recyclerViewSearch = activity?.findViewById<RecyclerView>(R.id.recycler)
recyclerViewSearch.setAdapter(setAdapterSearch())
val nestedScrollView = activity?.findViewById<NestedScrollView>(R.id.bottom_sheet_Search)
nestedScrollView!!.getParent().requestChildFocus(nestedScrollView, nestedScrollView);

- 1,161
- 11
- 8
Here is how I scroll to an item of RecyclerView when RecyclerView is inside NestedScrollView
First, get an item height
then scroll to the position
that you want.
val itemHeight =
binding.calendarRecyclerView.findViewHolderForAdapterPosition(0)!!.itemView.height
binding.nestedScrollView2.smoothScrollTo(0, position * itemHeight)

- 2,859
- 24
- 18
Kotlin:
scrollView.parent.requestChildFocus(scrollView, scrollView)

- 5,451
- 11
- 25
- 47

- 1