Android: ScrollView vs NestedScrollView

160

Quelle est la différence entre ScrollViewet NestedScrollView? Tous les deux, prolongent FrameLayout. Je veux connaître en profondeur les avantages et les inconvénients des deux.

Chintan Soni
la source

Réponses:

205

NestedScrollViewcomme son nom l'indique, est utilisé lorsqu'il est nécessaire d'avoir une vue défilante dans une autre vue défilante. Normalement, cela serait difficile à accomplir car le système ne serait pas en mesure de décider de la vue à faire défiler.

C'est là NestedScrollViewqu'intervient.

Roshan
la source
Voici un exemple d'application démontrant un NestedScrollView dans un parent ScrollView: github.com/AdamSHurwitz/NestedScrolling
Adam Hurwitz
36

En plus du défilement imbriqué, NestedScrollView une fonctionnalité majeure a été ajoutée, ce qui pourrait même le rendre intéressant en dehors des contextes imbriqués: il prend en charge OnScrollChangeListener. L'ajout d'un OnScrollChangeListenerà l'original ScrollView ci-dessous API 23 nécessitait un sous ScrollView- classementViewTreeObserverScrollView ou un déroutement avec le de, ce qui signifie souvent encore plus de travail que le sous-classement. Avec NestedScrollViewcela peut être fait en utilisant la construction en setter .

Fabian Ochmann
la source
21

NestedScrollView

NestedScrollView est exactement comme ScrollView, mais il prend en charge le rôle à la fois de parent et d'enfant de défilement imbriqués sur les nouvelles et anciennes versions d'Android. Le défilement imbriqué est activé par défaut.

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

ScrollView

Conteneur de mise en page pour une hiérarchie de vues qui peut être défilée par l'utilisateur, ce qui lui permet d'être plus grande que l'affichage physique. Un ScrollView est un FrameLayout, ce qui signifie que vous devez y placer un enfant contenant tout le contenu à faire défiler; cet enfant peut lui-même être un gestionnaire de mise en page avec une hiérarchie complexe d'objets

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

Amit Vaghela
la source
8

NestedScrollView est exactement comme ScrollView, mais dans NestedScrollView, nous pouvons mettre d'autres vues de défilement en tant qu'enfant, par exemple RecyclerView.

Mais si nous mettons RecyclerView dans NestedScrollView, le défilement fluide de RecyclerView est perturbé. Donc, pour ramener un défilement fluide, il y a une astuce:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

mis au-dessus de la ligne après avoir défini l'adaptateur pour recyclerView.

Umar Farooq
la source
Merci beaucoup mon frère: D
Zafar Iqbal
Gardez à l'esprit que cela (recyclerView dans un Nested) est assez inefficace en termes de passes / mesures de mise en page. Testez-le et vous verrez comment le VR arrête de «recycler» les vues.
Martin Marconcini
2

Je pense que l'un des avantages de l'utilisation de la vue par défilement imbriqué est que la disposition du cooridinateur n'écoute que les événements de défilement imbriqués. Donc si par ex. vous voulez que la barre d'outils défile vers le bas lorsque vous faites défiler le contenu de votre activité, elle ne défilera vers le bas que lorsque vous utilisez la vue de défilement imbriquée dans votre mise en page. Si vous utilisez une vue de défilement normale dans votre mise en page, la barre d'outils ne défilera pas lorsque l'utilisateur fait défiler le contenu.

Vibhanshu Sharma
la source