Android: ScrollView vs NestedScrollView

Respuestas:

205

NestedScrollViewcomo su nombre indica, se usa cuando es necesario una vista de desplazamiento dentro de otra vista de desplazamiento. Normalmente esto sería difícil de lograr ya que el sistema no podría decidir qué vista desplazarse.

Aquí es donde NestedScrollViewentra.

Roshan
fuente
Aquí hay una aplicación de muestra que muestra un NestedScrollView dentro de un ScrollView principal: github.com/AdamSHurwitz/NestedScrolling
Adam Hurwitz
36

Además del desplazamiento anidado, se NestedScrollView agregó una funcionalidad importante, que incluso podría hacerlo interesante fuera de los contextos anidados: tiene soporte de compilación OnScrollChangeListener. Agregar OnScrollChangeListenera la ScrollView API 23 original a continuación requería subclasificar ScrollViewo jugar con el ViewTreeObserverde loScrollView que a menudo significa aún más trabajo que la subclasificación. Con NestedScrollViewesto se puede hacer usando el setter incorporado .

Fabian Ochmann
fuente
21

NestedScrollView

NestedScrollView es como ScrollView, pero admite actuar como un elemento principal de desplazamiento anidado y un elemento secundario en las versiones nuevas y antiguas de Android. El desplazamiento anidado está habilitado de forma predeterminada.

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

ScrollView

Contenedor de diseño para una jerarquía de vistas que el usuario puede desplazar, lo que permite que sea más grande que la pantalla física. Un ScrollView es un FrameLayout, lo que significa que debe colocar un elemento secundario que contenga todo el contenido para desplazarse; este niño puede ser un administrador de diseño con una compleja jerarquía de objetos

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

Amit Vaghela
fuente
8

NestedScrollView es como ScrollView, pero en NestedScrollView podemos poner otras vistas de desplazamiento como elementos secundarios, por ejemplo, RecyclerView.

Pero si colocamos RecyclerView dentro de NestedScrollView, se altera el desplazamiento suave de RecyclerView. Entonces, para recuperar el desplazamiento suave, hay un truco:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

coloque la línea anterior después de configurar el adaptador para recyclerView.

Umar Farooq
fuente
Muchas gracias hermano: D
Zafar Iqbal
Tenga en cuenta que hacer esto (recyclerView dentro de un Nested) es bastante ineficiente en términos de pases / medidas de diseño. Pruébelo y verá cómo el RV deja de "reciclar" las vistas.
Martin Marconcini
2

Creo que un beneficio de usar la vista de desplazamiento anidado es que el diseño del cooridinador solo escucha los eventos de desplazamiento anidados. Entonces si por ej. desea que la barra de herramientas se desplace hacia abajo cuando desplace el contenido de la actividad, solo se desplazará hacia abajo cuando esté usando la vista de desplazamiento anidada en su diseño. Si utiliza una vista de desplazamiento normal en su diseño, la barra de herramientas no se desplazará cuando el usuario desplace el contenido.

Vibhanshu Sharma
fuente