Android: ScrollView vs NestedScrollView


160

Was ist der Unterschied zwischen ScrollViewund NestedScrollView? Beide erstrecken sich FrameLayout. Ich möchte die Vor- und Nachteile beider genau kennen.


Antworten:


205

NestedScrollViewWie der Name schon sagt, wird es verwendet, wenn eine Bildlaufansicht in einer anderen Bildlaufansicht erforderlich ist. Normalerweise ist dies schwierig zu erreichen, da das System nicht entscheiden kann, welche Ansicht gescrollt werden soll.

Hier kommt ins NestedScrollViewSpiel.


Hier ist eine Beispiel-App, die eine NestedScrollView in einer übergeordneten ScrollView demonstriert: github.com/AdamSHurwitz/NestedScrolling
Adam Hurwitz

36

Zusätzlich zum verschachtelten Scrollen wurde NestedScrollView eine wichtige Funktion hinzugefügt, die es auch außerhalb verschachtelter Kontexte interessant machen könnte: Es hat Unterstützung für eingebaut OnScrollChangeListener. Das Hinzufügen von a OnScrollChangeListenerzum Original ScrollView unter API 23 erforderte Unterklassen ScrollViewoder das Herumspielen mit dem ViewTreeObservervon,ScrollView was oft noch mehr Arbeit bedeutet als Unterklassen. Damit NestedScrollViewkann mit dem eingebauten Setter gearbeitet werden .



21

NestedScrollView

NestedScrollView ist genau wie ScrollView, unterstützt jedoch die Funktion als verschachteltes scrollendes Elternteil und Kind sowohl in neuen als auch in alten Versionen von Android. Das verschachtelte Scrollen ist standardmäßig aktiviert.

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

ScrollView

Layoutcontainer für eine Ansichtshierarchie, die vom Benutzer gescrollt werden kann, sodass sie größer als die physische Anzeige ist. Eine ScrollView ist ein FrameLayout. Dies bedeutet, dass Sie ein untergeordnetes Element darin platzieren sollten, das den gesamten zu scrollenden Inhalt enthält. Dieses untergeordnete Element kann selbst ein Layout-Manager mit einer komplexen Hierarchie von Objekten sein

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


8

NestedScrollView ist genau wie ScrollView, aber in NestedScrollView können wir andere Bildlaufansichten als untergeordnetes Element einfügen, z. B. RecyclerView.

Wenn wir jedoch RecyclerView in NestedScrollView einfügen, wird das reibungslose Scrollen von RecyclerView gestört. Um das reibungslose Scrollen wiederherzustellen, gibt es einen Trick:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

Setzen Sie die obige Zeile, nachdem Sie den Adapter für recyclerView eingestellt haben.


Vielen Dank Bruder: D
Zafar Iqbal

Beachten Sie, dass dies (recyclerView in einem verschachtelten Bereich) in Bezug auf Layoutdurchläufe / -maßnahmen recht ineffizient ist. Testen Sie es und Sie werden sehen, wie das Wohnmobil das "Recycling" von Ansichten beendet.
Martin Marconcini

2

Ich denke, ein Vorteil der Verwendung der verschachtelten Bildlaufansicht besteht darin, dass das Cooridinator-Layout nur auf verschachtelte Bildlaufereignisse wartet. Also wenn zum Beispiel. Wenn Sie möchten, dass die Symbolleiste beim Scrollen des Aktivitätsinhalts nach unten gescrollt wird, wird sie nur nach unten gescrollt, wenn Sie in Ihrem Layout eine verschachtelte Bildlaufansicht verwenden. Wenn Sie in Ihrem Layout eine normale Bildlaufansicht verwenden, wird die Symbolleiste nicht gescrollt, wenn der Benutzer den Inhalt scrollt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.