¿Cuál es la diferencia entre ScrollView
y NestedScrollView
? Ambos se extienden FrameLayout
. Quiero saber en profundidad los pros y los contras de ambos.
¿Cuál es la diferencia entre ScrollView
y NestedScrollView
? Ambos se extienden FrameLayout
. Quiero saber en profundidad los pros y los contras de ambos.
Respuestas:
NestedScrollView
como 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 NestedScrollView
entra.
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 OnScrollChangeListener
a la ScrollView
API 23 original a continuación requería subclasificar ScrollView
o jugar con el ViewTreeObserver
de loScrollView
que a menudo significa aún más trabajo que la subclasificación. Con NestedScrollView
esto se puede hacer usando el setter incorporado .
Además de las ventajas enumeradas en las respuestas dadas, una ventaja más de NestedScrollView sobre ScrollView es su compatibilidad con CoordinatorLayout. ScrollView no coopera con CoordinatorLayout. Debe usar NestedScrollView para obtener el comportamiento de "desplazamiento fuera de la pantalla" para la barra de herramientas.
La barra de herramientas no colapsará con Scrollview como elemento secundario de CoordinatorLayout
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
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.
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.