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

Ответы (6)

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

Здесь появляется NestedScrollView.

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

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

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

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

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

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

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

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

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

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

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

2022 WebDevInsider