Was ist eigentlich der Unterschied zwischen ScrollView
und NestedScrollView
? Ich habe beide benutzt. Beide erweitern FrameLayout
. Ich möchte die Vor- und Nachteile beider kennen. Wenn jemand kann bitte helfen Sie mir. Vielen Dank.
NestedScrollView
wird, wie der Name vermuten lässt, verwendet, wenn eine Bildlaufansicht in einer anderen Bildlaufansicht erforderlich ist. Normalerweise ist dies schwierig zu bewerkstelligen, da das System nicht entscheiden kann, welche Ansicht gescrollt werden soll.
Hier kommt NestedScrollView
ins Spiel.
NestedScrollView
NestedScrollView ist genauso wie ScrollView, unterstützt jedoch die Funktion als Sowohl ein verschachteltes Bildlaufelement als auch ein untergeordnetes Element in der neuen und der alten Version von Android. Verschachtelter Bildlauf ist standardmäßig aktiviert.
https://developer.Android.com/reference/Android/support/v4/widget/NestedScrollView.html
ScrollView
Layout-Container für eine Ansichtshierarchie, die von der .__-Datei gescrollt werden kann. Benutzer, so dass es größer als die physische Anzeige ist. EIN ScrollView ist ein FrameLayout, dh, Sie sollten ein untergeordnetes Element einfügen den gesamten Inhalt zum Blättern enthalten; Dieses Kind kann selbst ein .__ sein. Layout-Manager mit einer komplexen Objekthierarchie
https://developer.Android.com/reference/Android/widget/ScrollView.html
Zusätzlich zum verschachtelten BildlaufNestedScrollView
wurde eine Hauptfunktion hinzugefügt, die es sogar außerhalb verschachtelter Kontexte interessant machen könnte: Es hat Unterstützung für OnScrollChangeListener
eingebaut. Hinzufügen einer OnScrollChangeListener
zur ursprünglichen ScrollView
unterhalb der API 23 erforderliche Unterklassifizierung ScrollView
oder Durcheinander mit der ViewTreeObserver
der ScrollView
, was oft sogar mehr Arbeit als Subklassifizierung bedeutet. Mit NestedScrollView
kann dies mit dem eingebauten Setter durchgeführt werden.
Abgesehen von den in den Antworten aufgeführten Vorteilen ist ein weiterer Vorteil von NestedScrollView gegenüber ScrollView die Kompatibilität mit CoordinatorLayout. Das ScrollView arbeitet nicht mit dem CoordinatorLayout zusammen. Sie müssen NestedScrollView verwenden, um für die Symbolleiste das Verhalten "Bildlauf außerhalb des Bildschirms" zu erhalten.
NestedScrollView ist genau wie ScrollView, aber in NestedScrollView können wir andere Bildlaufansichten als untergeordnetes Element einfügen, z. RecyclerView.
Wenn wir RecyclerView jedoch in NestedScrollView einfügen, wird das reibungslose Scrollen von RecyclerView gestört. Um einen reibungslosen Bildlauf wieder herzustellen, gibt es folgenden Trick:
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
setzen Sie die obere Zeile, nachdem Sie den Adapter für recyclerView eingestellt haben.
NestedScrollView ist ein Widget, das verwendet wird, wenn eine scrollbare Ansicht in einer anderen scrollbaren Ansicht implementiert werden soll.
Klicken Sie auf den Link, um die Layout-Ausgabe anzuzeigen: NestedScrollView-Beispiel
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:Android="<a class="vglnk" href="http://schemas.Android.com/apk/res/Android" rel="nofollow"><span>http</span><span>://</span><span>schemas</span><span>.</span><span>Android</span><span>.</span><span>com</span><span>/</span><span>apk</span><span>/</span><span>res</span><span>/</span><span>Android</span></a>"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:gravity="center"
Android:orientation="vertical">
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:layout_margin="20dp"
Android:background="@Android:color/white"
Android:padding="10dp">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/nested_scroll_text"/>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/guava"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/jackfruit"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/mix_fruit"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/pomegranate"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/strawberry"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/zespri_kiwi"/>
</LinearLayout>
Ich denke, ein Vorteil der Ansicht "Verschachtelter Bildlauf" ist, dass das Cooridinator-Layout nur auf verschachtelte Bildlaufereignisse wartet. Also, wenn zum Beispiel. Wenn Sie möchten, dass die Symbolleiste nach unten rollt, wenn Sie den Inhalt der Aktivität scrollen, wird nur ein Bildlauf nach unten ausgeführt, wenn Sie die verschachtelte Bildlaufansicht in Ihrem Layout verwenden. Wenn Sie in Ihrem Layout eine normale Bildlaufansicht verwenden, wird in der Symbolleiste kein Bildlauf ausgeführt, wenn der Benutzer einen Bildlauf durch den Inhalt durchführt.