Jaka jest różnica między ScrollView
i NestedScrollView
? Oba rozszerzają się FrameLayout
. Chcę dogłębnie poznać zalety i wady obu z nich.
Jaka jest różnica między ScrollView
i NestedScrollView
? Oba rozszerzają się FrameLayout
. Chcę dogłębnie poznać zalety i wady obu z nich.
Odpowiedzi:
NestedScrollView
jak 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 NestedScrollView
pojawia się.
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 OnScrollChangeListener
do oryginału ScrollView
poniżej API 23 wymagało podklasy ScrollView
lub mieszania ViewTreeObserver
z tym,ScrollView
co często oznacza nawet więcej pracy niż podklasy. Dzięki NestedScrollView
temu można to zrobić za pomocą wbudowanego setera .
Poza zaletami wymienionymi w udzielonych odpowiedziach, jeszcze jedną zaletą NestedScrollView nad ScrollView jest jego zgodność z CoordinatorLayout. ScrollView nie współpracuje z CoordinatorLayout. Musisz użyć NestedScrollView, aby uzyskać zachowanie „przewijania poza ekranem” dla paska narzędzi.
Pasek narzędzi nie zwinie się, gdy Scrollview jest elementem podrzędnym CoordinatorLayout
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
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.
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ść.