web-dev-qa-db-fra.com

android: ScrollView vs NestedScrollView

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.

90
Chintan Soni

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.

128
Roshan

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

18
Amit Vaghela

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 ScrollViewinfé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é .

16
Fabian Ochmann

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

12
Suraj

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.

3
Umar Farooq

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>

0
Aamir Kalimi

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.

0
Vibhanshu Sharma