Quelle est la différence entre ScrollView
et NestedScrollView
en fait? J'ai utilisé les deux. Les deux, étendent FrameLayout
. Je veux connaître en profondeur les avantages et les inconvénients des deux. Si quelqu'un peut m'aider s'il vous plaît. Merci.
NestedScrollView
comme son nom l'indique est utilisé lorsqu'il est nécessaire de disposer d'une vue défilante dans une autre vue défilante. Normalement, cela serait difficile à réaliser car le système serait incapable de décider quelle vue défiler.
C'est là que NestedScrollView
entre en jeu.
NestedScrollView
NestedScrollView est comme ScrollView, mais il prend en charge le rôle de parent et enfant de défilement imbriqués sur les nouvelles et les 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 Layout pour une hiérarchie de vues pouvant être parcourue par le utilisateur, ce qui lui permet d'être plus grand que l'affichage physique. UNE ScrollView est un FrameLayout, ce qui signifie que vous devez y placer un enfant contenant tout le contenu à faire défiler; cet enfant peut être lui-même un gestionnaire de disposition avec une hiérarchie complexe d'objets
https://developer.Android.com/reference/Android/widget/ScrollView.html
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 intègre le support pour OnScrollChangeListener
. Ajouter une OnScrollChangeListener
à la ScrollView
inférieure originale API 23 nécessitait un sous-classement ScrollView
ou manipulant la ViewTreeObserver
de la ScrollView
qui signifie souvent même plus de travail que le sous-classement. Avec NestedScrollView
cela peut être fait en utilisant le configurateur intégré .
Outre les avantages énumérés dans les réponses données, un autre avantage de NestedScrollView par rapport à ScrollView est sa compatibilité avec CoordinatorLayout. ScrollView ne coopère pas avec CoordinatorLayout. Vous devez utiliser NestedScrollView pour obtenir un comportement de "défilement hors écran" pour la barre d'outils.
La barre d'outils ne s'effondrera pas avec Scrollview en tant qu'enfant de Coordinator Layout
NestedScrollView est semblable à ScrollView, mais dans NestedScrollView, nous pouvons placer d’autres vues défilantes comme enfants, par exemple. RecyclerView.
Mais si nous mettons RecyclerView dans NestedScrollView, le défilement régulier de RecyclerView est perturbé. Donc, pour ramener le défilement en douceur, il y a un truc:
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
mettez la ligne ci-dessus après avoir configuré l’adaptateur pour recyclerView.
NestedScrollView est un widget utilisé lorsque nous voulons implémenter une vue défilable dans une autre vue défilable.
Cliquez sur le lien pour voir la sortie de présentation: Exemple de NestedScrollView
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:Android="<a class="vglnk" href="http://schemas.Android.com/apk/res/Android" rel="nofollow"><span>http</span><span>://</span><span>schemas</span><span>.</span><span>Android</span><span>.</span><span>com</span><span>/</span><span>apk</span><span>/</span><span>res</span><span>/</span><span>Android</span></a>"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:gravity="center"
Android:orientation="vertical">
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="100dp"
Android:layout_margin="20dp"
Android:background="@Android:color/white"
Android:padding="10dp">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/nested_scroll_text"/>
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/guava"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/jackfruit"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/mix_fruit"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/pomegranate"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/strawberry"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="20dp"
Android:contentDescription="@string/no_image"
Android:src="@drawable/zespri_kiwi"/>
</LinearLayout>
Je pense que l’un des avantages de l’affichage 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 souhaitez que la barre d’outils défile lorsque vous faites défiler le contenu de votre activité; elle ne défilera que lorsque vous utilisez l’affichage défilement imbriqué dans votre présentation. 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 fera défiler le contenu.