Android: ScrollView vs NestedScrollView


160

Відповіді:


205

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

Ось де NestedScrollViewзаходить.


Ось зразок додатка, що демонструє NestedScrollView в батьківському ScrollView: github.com/AdamSHurwitz/NestedScrolling
Адам Гурвіц,

36

На додаток до вкладеної прокрутки NestedScrollView додано ще один головний функціонал, який навіть може зробити його цікавим поза вкладеними контекстами: він має вбудовану підтримку OnScrollChangeListener. Додавання OnScrollChangeListenerдо оригіналу ScrollView нижче API 23 вимагає підкласифікації ScrollViewабо возитися з ViewTreeObserverтим,ScrollView що часто означає навіть більше роботи, ніж підкласифікація. З 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);

поставити вище рядка після встановлення адаптера для recilerView.


Дякую,
Зафар Ікбал

Майте на увазі, що робити це (recilerView всередині вкладеного) досить неефективно з точки зору пропусків / заходів планування. Перевірте його, і ви побачите, як RV припиняє "переробляти" види.
Мартін Маркончіні

2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.