У чому різниця між ScrollView
і NestedScrollView
? Вони обоє, поширюються FrameLayout
. Я хочу глибоко знати плюси та мінуси обох.
У чому різниця між ScrollView
і NestedScrollView
? Вони обоє, поширюються FrameLayout
. Я хочу глибоко знати плюси та мінуси обох.
Відповіді:
NestedScrollView
як випливає з назви, використовується тоді, коли є необхідність перегляду прокрутки всередині іншого виду прокрутки. Зазвичай це буде важко здійснити, оскільки система не зможе визначити, який вид прокрутки.
Ось де NestedScrollView
заходить.
На додаток до вкладеної прокрутки NestedScrollView
додано ще один головний функціонал, який навіть може зробити його цікавим поза вкладеними контекстами: він має вбудовану підтримку OnScrollChangeListener
. Додавання OnScrollChangeListener
до оригіналу ScrollView
нижче API 23 вимагає підкласифікації ScrollView
або возитися з ViewTreeObserver
тим,ScrollView
що часто означає навіть більше роботи, ніж підкласифікація. З NestedScrollView
ним можна зробити за допомогою вбудованого сеттера .
Крім переваг, перелічених у наведених відповідях, ще однією перевагою NestedScrollView перед ScrollView є сумісність з CoordinatorLayout. ScrollView не співпрацює з CoordinatorLayout. Вам потрібно використовувати NestedScrollView, щоб отримати "прокручування поза екраном" на панелі інструментів.
Панель інструментів не зруйнується із програмою Scrollview як дочірки CoordinatorLayout
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
NestedScrollView так само, як і ScrollView, але в NestedScrollView ми можемо розміщувати інші види прокрутки як дочірні, наприклад RecyclerView.
Але якщо ми помістимо RecyclerView всередину NestedScrollView, плавне прокручування RecyclerView порушено. Отже, щоб повернути плавне прокручування, є хитрість:
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
поставити вище рядка після встановлення адаптера для recilerView.
Я думаю, що однією з переваг використання вигляду Nested Scroll є те, що макет координатора прослуховує лише вкладені події прокрутки. Тож якщо для екс. ви хочете, щоб панель інструментів прокручувалася вниз, коли ви прокручуєте вміст діяльності, вона буде прокручуватися вниз лише тоді, коли ви використовуєте вкладений перегляд прокрутки у своєму макеті. Якщо ви використовуєте звичайний вид прокрутки у своєму макеті, на панелі інструментів не буде прокручуватися, коли користувач прокручує вміст.