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.


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.


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 .



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


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.