191

What is the difference between ScrollView and NestedScrollView? Both of them, extend FrameLayout. I want to know in depth pros and cons of both of them.

Johnny Five
  • 788
  • 1
  • 9
  • 27
Chintan Soni
  • 22,543
  • 24
  • 96
  • 158
  • 1
    [For vertical scrolling, consider NestedScrollView instead of scroll view which offers greater user interface flexibility and support for the material design scrolling patterns.](https://developer.android.com/reference/android/widget/ScrollView.html) – Songo Jul 05 '19 at 19:44

6 Answers6

249

NestedScrollView as the name suggests is used when there is a need for a scrolling view inside another scrolling view. Normally this would be difficult to accomplish since the system would be unable to decide which view to scroll.

This is where NestedScrollView comes in.

Ajay S
  • 45,716
  • 27
  • 84
  • 103
Roshan
  • 3,092
  • 1
  • 11
  • 22
  • Here's a sample App demonstrating a NestedScrollView within a parent ScrollView: https://github.com/AdamSHurwitz/NestedScrolling – Adam Hurwitz Jun 21 '16 at 04:27
44

In addition to the nested scrolling NestedScrollView added one major functionality, which could even make it interesting outside of nested contexts: It has build in support for OnScrollChangeListener. Adding a OnScrollChangeListener to the original ScrollView below API 23 required subclassing ScrollView or messing around with the ViewTreeObserver of the ScrollView which often means even more work than subclassing. With NestedScrollView it can be done using the build-in setter.

Fabian Ochmann
  • 607
  • 7
  • 10
31

Other than the advantages listed in the answers given, one more advantage of NestedScrollView over ScrollView is its compatibility with CoordinatorLayout. The ScrollView does not cooperate with the CoordinatorLayout. You have to use NestedScrollView to get "scroll off-screen" behaviour for the toolbar.

Toolbar will not collapse with Scrollview as child of CoordinatorLayout

Suraj
  • 511
  • 5
  • 11
21

NestedScrollView

NestedScrollView is just like ScrollView, but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.

https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html

ScrollView

Layout container for a view hierarchy that can be scrolled by the user, allowing it to be larger than the physical display. A ScrollView is a FrameLayout, meaning you should place one child in it containing the entire contents to scroll; this child may itself be a layout manager with a complex hierarchy of objects

https://developer.android.com/reference/android/widget/ScrollView.html

Amit Vaghela
  • 21,317
  • 19
  • 79
  • 131
10

NestedScrollView is just like ScrollView, but in NestedScrollView we can put other scrolling views as child of it, e.g. RecyclerView.

But if we put RecyclerView inside NestedScrollView, RecyclerView's smooth scrolling is disturbed. So to bring back smooth scrolling there's trick:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

put above line after setting adapter for recyclerView.

Umar Farooq
  • 201
  • 2
  • 5
  • 4
    Keep in mind that doing this (recyclerView inside a Nested) is quite inefficient in terms of layout passes/measures. Test it and you will see how the RV stops "recycling" views. – Martin Marconcini Jul 16 '20 at 10:22
3

I think one Benefit of using Nested Scroll view is that the cooridinator layout only listens for nested scroll events. So if for ex. you want the toolbar to scroll down when you scroll you content of activity, it will only scroll down when you are using nested scroll view in your layout. If you use a normal scroll view in your layout, the toolbar wont scroll when the user scrolls the content.