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.


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.


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 .



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


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.