Android: ScrollView против NestedScrollView

160

В чем разница между ScrollViewи NestedScrollView? Оба они расширяются FrameLayout. Я хочу подробно узнать плюсы и минусы их обоих.

Чинтан Сони
источник

Ответы:

205

NestedScrollViewкак следует из названия, используется, когда есть необходимость в представлении с прокруткой внутри другого представления с прокруткой. Обычно это будет трудно сделать, так как система не сможет решить, какой вид прокручивать.

Это где NestedScrollViewприходит.

Рошан
источник
Вот пример приложения, демонстрирующего NestedScrollView в родительском ScrollView: github.com/AdamSHurwitz/NestedScrolling
Адам Хурвиц,
36

В дополнение к вложенной прокрутке NestedScrollView добавлена ​​одна основная функциональность, которая может даже сделать ее интересной вне вложенных контекстов: она имеет встроенную поддержку OnScrollChangeListener. Добавление OnScrollChangeListenerк оригинальному ScrollView API 23, приведенному ниже, требовало создания подклассов ScrollViewили возни с ними,ViewTreeObserverScrollView что часто означает даже больше работы, чем создание подклассов. С NestedScrollViewэтим можно сделать используя встроенный сеттер .

Фабиан Охманн
источник
26

Помимо преимуществ, перечисленных в приведенных ответах, еще одним преимуществом NestedScrollView над ScrollView является его совместимость с CoordinatorLayout. ScrollView не взаимодействует с CoordinatorLayout. Вы должны использовать NestedScrollView, чтобы получить «прокрутку вне экрана» для панели инструментов.

Панель инструментов не рухнет с Scrollview как дочерний элемент CoordinatorLayout

Сураджа
источник
21

NestedScrollView

NestedScrollView аналогичен ScrollView, но он поддерживает функцию как вложенного прокручивающегося родителя, так и потомка в новых и старых версиях Android. Вложенная прокрутка включена по умолчанию.

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

ScrollView

Контейнер макета для иерархии представления, которая может прокручиваться пользователем, что позволяет ему быть больше, чем физический дисплей. ScrollView - это FrameLayout, то есть вы должны поместить в него одного потомка, содержащего все содержимое для прокрутки; этот ребенок сам может быть менеджером макета со сложной иерархией объектов

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

Амит Вагела
источник
8

NestedScrollView похож на ScrollView, но в NestedScrollView мы можем поставить другие прокручиваемые представления как дочерние, например, RecyclerView.

Но если мы поместим RecyclerView в NestedScrollView, плавная прокрутка RecyclerView будет нарушена. Итак, чтобы вернуть плавную прокрутку, есть хитрость:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

поставьте строку выше после установки адаптера для recyclerView.

Умар Фарук
источник
Большое спасибо, братан: D
Зафар Икбал
Имейте в виду, что делать это (recyclerView внутри Nested) довольно неэффективно с точки зрения проходов / мер макета. Протестируйте его, и вы увидите, как RV перестает «перерабатывать» виды.
Мартин Маркончини
2

Я думаю, что одним из преимуществ использования представления «Вложенная прокрутка» является то, что раскладка cooridinator прослушивает только вложенные события прокрутки. Так что если для экс. Вы хотите, чтобы панель инструментов прокручивалась вниз при прокрутке содержимого активности, она будет прокручиваться только вниз, когда вы используете вложенный вид прокрутки в макете. Если вы используете обычный вид прокрутки в макете, панель инструментов не будет прокручиваться, когда пользователь прокручивает содержимое.

Вибханшу Шарма
источник