Android: ScrollView vs NestedScrollView

160

Qual é a diferença entre ScrollViewe NestedScrollView? Os dois se estendem FrameLayout. Quero conhecer em profundidade os prós e os contras de ambos.

Chintan Soni
fonte

Respostas:

205

NestedScrollViewcomo o nome sugere, é usado quando há necessidade de uma exibição de rolagem dentro de outra exibição de rolagem. Normalmente, isso seria difícil de realizar, uma vez que o sistema não seria capaz de decidir qual visualização seria exibida.

É aqui que NestedScrollViewentra.

Roshan
fonte
Aqui está um exemplo App demonstrando uma NestedScrollView dentro de um ScrollView parent: github.com/AdamSHurwitz/NestedScrolling
Adam Hurwitz
36

Além da rolagem aninhada, foi NestedScrollView adicionada uma funcionalidade importante, que pode até torná-la interessante fora dos contextos aninhados: Ele tem suporte para OnScrollChangeListener. A adição de um OnScrollChangeListenerao ScrollView API abaixo da API 23 original exigia subclassificação ScrollViewou brincadeira com ViewTreeObserveroScrollView que geralmente significa ainda mais trabalho do que subclassificação. Com NestedScrollViewisso pode ser feito usando o configurador embutido .

Fabian Ochmann
fonte
21

NestedScrollView

NestedScrollView é como o ScrollView, mas ele suporta atuar como pai e filho com rolagem aninhada nas versões nova e antiga do Android. A rolagem aninhada é ativada por padrão.

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

ScrollView

Recipiente de layout para uma hierarquia de exibição que pode ser rolada pelo usuário, permitindo que seja maior que a exibição física. Um ScrollView é um FrameLayout, o que significa que você deve colocar um filho nele contendo todo o conteúdo para rolar; esse filho pode ser um gerente de layout com uma hierarquia complexa de objetos

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

Amit Vaghela
fonte
8

NestedScrollView é como ScrollView, mas em NestedScrollView podemos colocar outras visualizações de rolagem como filho dela, por exemplo, RecyclerView.

Mas se colocarmos o RecyclerView dentro do NestedScrollView, a rolagem suave do RecyclerView será interrompida. Então, para retornar a rolagem suave, há um truque:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

coloque acima da linha após configurar o adaptador para o recyclerView.

Umar Farooq
fonte
Muito obrigado mano: D
Zafar Iqbal
Lembre-se de que fazer isso (recyclerView dentro de um Nested) é bastante ineficiente em termos de aprovações / medidas de layout. Teste-o e você verá como o RV interrompe as visualizações de "reciclagem".
Martin Marconcini 16/07
2

Acho que um benefício do uso da exibição Rolagem aninhada é que o layout do coordenador apenas escuta eventos de rolagem aninhada. Então, se por ex. você deseja que a barra de ferramentas role para baixo ao rolar o conteúdo da atividade, ela será rolada para baixo apenas quando você estiver usando a exibição de rolagem aninhada em seu layout. Se você usar uma exibição de rolagem normal em seu layout, a barra de ferramentas não será rolada quando o usuário rolar o conteúdo.

Vibhanshu Sharma
fonte