Qual é a diferença entre ScrollView
e NestedScrollView
? Os dois se estendem FrameLayout
. Quero conhecer em profundidade os prós e os contras de ambos.
Qual é a diferença entre ScrollView
e NestedScrollView
? Os dois se estendem FrameLayout
. Quero conhecer em profundidade os prós e os contras de ambos.
Respostas:
NestedScrollView
como 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 NestedScrollView
entra.
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 OnScrollChangeListener
ao ScrollView
API abaixo da API 23 original exigia subclassificação ScrollView
ou brincadeira com ViewTreeObserver
oScrollView
que geralmente significa ainda mais trabalho do que subclassificação. Com NestedScrollView
isso pode ser feito usando o configurador embutido .
Além das vantagens listadas nas respostas fornecidas, mais uma vantagem do NestedScrollView sobre o ScrollView é sua compatibilidade com o CoordinatorLayout. O ScrollView não coopera com o CoordinatorLayout. Você precisa usar o NestedScrollView para obter o comportamento de "rolagem para fora da tela" da barra de ferramentas.
A barra de ferramentas não será recolhida com o Scrollview como filho do CoordinatorLayout
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
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.
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.