Qual è la differenza tra ScrollView
e NestedScrollView
? Entrambi si estendono FrameLayout
. Voglio conoscere in dettaglio i pro e i contro di entrambi.
Qual è la differenza tra ScrollView
e NestedScrollView
? Entrambi si estendono FrameLayout
. Voglio conoscere in dettaglio i pro e i contro di entrambi.
Risposte:
NestedScrollView
come suggerisce il nome viene utilizzato quando è necessaria una vista a scorrimento all'interno di un'altra vista a scorrimento. Normalmente questo sarebbe difficile da realizzare poiché il sistema non sarebbe in grado di decidere quale vista scorrere.
È qui che NestedScrollView
entra in gioco.
Oltre allo scorrimento nidificato, è stata NestedScrollView
aggiunta una delle funzionalità principali, che potrebbe anche renderlo interessante al di fuori dei contesti nidificati: ha un supporto integrato per OnScrollChangeListener
. L'aggiunta di OnScrollChangeListener
a ScrollView
all'API 23 originale di seguito richiedeva la sottoclasse ScrollView
o il caos con ViewTreeObserver
ilScrollView
che spesso significa ancora più lavoro della sottoclasse. Con NestedScrollView
esso può essere fatto utilizzando il setter incorporato .
Oltre ai vantaggi elencati nelle risposte fornite, un altro vantaggio di NestedScrollView su ScrollView è la sua compatibilità con CoordinatorLayout. ScrollView non collabora con CoordinatorLayout. Devi usare NestedScrollView per ottenere il comportamento "scroll off-screen" per la barra degli strumenti.
La barra degli strumenti non collassa con Scrollview come figlio di CoordinatorLayout
NestedScrollView
NestedScrollView è proprio come ScrollView, ma supporta la funzione di genitore e figlio di scorrimento nidificati sia su versioni nuove che vecchie di Android. Lo scorrimento nidificato è abilitato per impostazione predefinita.
https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html
ScrollView
Contenitore di layout per una gerarchia di viste che può essere fatta scorrere dall'utente, consentendo di essere più grande della visualizzazione fisica. Un ScrollView è un FrameLayout, il che significa che è necessario posizionare un figlio al suo interno contenente l'intero contenuto da scorrere; questo figlio può essere esso stesso un gestore di layout con una complessa gerarchia di oggetti
https://developer.android.com/reference/android/widget/ScrollView.html
NestedScrollView è proprio come ScrollView, ma in NestedScrollView possiamo inserire altre viste di scorrimento come figlio di esso, ad esempio RecyclerView.
Ma se inseriamo RecyclerView in NestedScrollView, lo scorrimento regolare di RecyclerView è disturbato. Quindi per riportare lo scorrimento regolare c'è un trucco:
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
mettere sopra la riga dopo aver impostato l'adattatore per recyclerView.
Penso che uno dei vantaggi dell'utilizzo della vista Scorri nidificati sia che il layout del cooridinator ascolta solo gli eventi di scorrimento nidificati. Quindi se per es. si desidera che la barra degli strumenti scorra verso il basso quando si scorre il contenuto dell'attività, scorrerà verso il basso solo quando si utilizza la vista di scorrimento nidificata nel layout. Se si utilizza una vista di scorrimento normale nel layout, la barra degli strumenti non scorre quando l'utente scorre il contenuto.