Android: ScrollView vs NestedScrollView

160

Jaka jest różnica między ScrollViewi NestedScrollView? Oba rozszerzają się FrameLayout. Chcę dogłębnie poznać zalety i wady obu z nich.

Chintan Soni
źródło

Odpowiedzi:

205

NestedScrollViewjak sama nazwa wskazuje, jest używany, gdy istnieje potrzeba przewijania widoku w innym przewijanym widoku. Zwykle byłoby to trudne do osiągnięcia, ponieważ system nie byłby w stanie zdecydować, który widok przewinąć.

Tutaj NestedScrollViewpojawia się.

Roshan
źródło
Oto przykładowa aplikacja prezentująca NestedScrollView w nadrzędnym ScrollView
Adam Hurwitz
36

Oprócz zagnieżdżonego przewijania NestedScrollView dodano jedną główną funkcję, która może nawet uczynić ją interesującą poza zagnieżdżonymi kontekstami: ma wbudowaną obsługę OnScrollChangeListener. Dodanie a OnScrollChangeListenerdo oryginału ScrollView poniżej API 23 wymagało podklasy ScrollViewlub mieszania ViewTreeObserverz tym,ScrollView co często oznacza nawet więcej pracy niż podklasy. Dzięki NestedScrollViewtemu można to zrobić za pomocą wbudowanego setera .

Fabian Ochmann
źródło
21

NestedScrollView

NestedScrollView jest podobny do ScrollView, ale obsługuje działanie zarówno jako zagnieżdżony przewijany element nadrzędny i podrzędny w nowych i starych wersjach systemu Android. Przewijanie zagnieżdżone jest domyślnie włączone.

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

ScrollView

Kontener układu dla hierarchii widoków, którą użytkownik może przewijać, dzięki czemu może być większy niż fizyczny wyświetlacz. ScrollView to FrameLayout, co oznacza, że ​​należy umieścić w nim jedno dziecko zawierające całą zawartość do przewijania; to dziecko może samo być menedżerem układu ze złożoną hierarchią obiektów

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

Amit Vaghela
źródło
8

NestedScrollView jest tak samo jak ScrollView, ale w NestedScrollView możemy umieścić inne przewijane widoki jako potomne, np. RecyclerView.

Ale jeśli umieścimy RecyclerView wewnątrz NestedScrollView, płynne przewijanie RecyclerView zostanie zakłócone. Aby przywrócić płynne przewijanie, jest sztuczka:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

umieść powyższą linię po ustawieniu adaptera do recyklingu.

Umar Farooq
źródło
Wielkie dzięki bracie: D
Zafar Iqbal
Należy pamiętać, że zrobienie tego (recyclinglerView wewnątrz zagnieżdżonego) jest dość nieefektywne pod względem przebiegu / miary układu. Przetestuj to, a zobaczysz, jak kamper zatrzymuje widoki „recyklingu”.
Martin Marconcini,
2

Myślę, że jedną z zalet korzystania z widoku zagnieżdżonego przewijania jest to, że układ współrzędnych nasłuchuje tylko zdarzeń zagnieżdżonych przewijania. Więc jeśli np. chcesz, aby pasek narzędzi przewijał się w dół podczas przewijania treści działania, będzie on przewijał się w dół tylko wtedy, gdy używasz zagnieżdżonego widoku przewijania w układzie. Jeśli w układzie używasz normalnego widoku przewijania, pasek narzędzi nie będzie przewijał się, gdy użytkownik przewinie zawartość.

Vibhanshu Sharma
źródło