web-dev-qa-db-fra.com

ViewPager dans un NestedScrollView

J'ai besoin de créer une interface telle que Google Newsstand, qui est une sorte de ViewPager (défilement horizontal) sur un en-tête de réduction (défilement vertical). L’une de mes exigences est d’utiliser la nouvelle bibliothèque d’assistance à la conception présentée lors du Google IO 2015 . ( http://Android-developers.blogspot.ca/2015/05/Android-design-support -library.html )

Sur la base de l'exemple créé par Chris Banes ( https://github.com/chrisbanes/cheesesquare ), j'ai atteint le point où je suis capable de faire le comportement de réduction, mais avec un LinearLayout de base (sans défilement horizontal). ).

J'ai essayé de remplacer le LinearLayout par un ViewPager et j'ai eu un écran vide. J'ai joué avec: la largeur, le poids et toutes sortes de groupes de vues, mais .... toujours un écran vide. Il semble que ViewPager et NestedScrollView ne s'aiment pas.

J'ai essayé une solution de contournement en utilisant HorizontalScrollView: cela fonctionne mais je perds l'avantage de la fonctionnalité PagerTitleStrip et la mise au point sur un seul panneau (je peux arrêter l'horizontale entre 2 panneaux).

Maintenant, je n'ai plus d'idées, si quelqu'un peut me mener à une solution ... 

Merci

Voici mon dernier fichier de mise en page:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="@dimen/header_height"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <include
                layout="@layout/part_header"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                app:layout_collapseMode="parallax"/>

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/activity_main_toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

        </Android.support.design.widget.CollapsingToolbarLayout>
    </Android.support.design.widget.AppBarLayout>

    <Android.support.v4.widget.NestedScrollView
        Android:id="@+id/activity_main_nestedscrollview"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <Android.support.v4.view.ViewPager
            Android:id="@+id/activity_main_viewpager"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#FFA0"/>


    </Android.support.v4.widget.NestedScrollView>
</Android.support.design.widget.CoordinatorLayout>
90
Kyso84

Je rencontre ce problème, je le résout par setFillViewport (true)

<Android.support.v4.widget.NestedScrollView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:id="@+id/nest_scrollview"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="mio.kon.yyb.nestedscrollviewbug.ScrollingActivity"
tools:showIn="@layout/activity_scrolling">


    <Android.support.v4.view.ViewPager
        Android:id="@+id/viewpager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>

en activité 

  NestedScrollView scrollView = (NestedScrollView) findViewById (R.id.nest_scrollview);
    scrollView.setFillViewport (true);

 enter image description here

105
mio4kon

D'accord, j'ai fait une petite démo avec ViewPager et NestedScrollView. Le problème que j'ai rencontré concernait la hauteur de ViewPager et la ListView. J'ai donc fait une petite modification sur les mesures de hauteur ListView et ViewPager's

Si quelqu'un souhaite consulter le code, voici le lien: https://github.com/TheLittleNaruto/SupportDesignExample/

Sortie:

 enter image description here

66
TheLittleNaruto

Ajoutez Android:fillViewport="true" dans votre NestedScrollView. période.

34
Sujit Yadav

Avait les mêmes problèmes.

Lorsque vous placez NestedScrollView around ViewPager, cela ne fonctionnera pas.

Ce que DID travaille cependant, c'est de placer NestedScrollView inside la disposition du fragment que je charge dans ViewPager.

<Android.support.v4.widget.NestedScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:id="@id/fragment_detail"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_gravity="fill_vertical"
            Android:orientation="vertical">
    ...Content...
    </LinearLayout>
</Android.support.v4.widget.NestedScrollView>

</ pre> </ code>

19
ThemBones

Au lieu de placer ViewPager dans NestedScrollView, procédez de la même manière.

Placez le NestedScrollView dans les vues enfant à l'intérieur du ViewPager, qui est essentiellement la disposition du fragment. Il est également très probable que vous n’ayez même pas besoin d’utiliser NestedScrollView si la présentation de la liste de votre fragment est très simple.

Exemples de mises en page

Mise en page de l'activité:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/app_bar"
        Android:layout_width="match_parent"
        Android:layout_height="@dimen/app_bar_height"
        Android:fitsSystemWindows="true"
        Android:theme="@style/AppTheme.AppBarOverlay">

        <Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/toolbar_layout"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

            <ImageView
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:minHeight="@dimen/app_bar_height"
                Android:scaleType="centerCrop"
                Android:src="@drawable/my_bg"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.8"
                app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" />

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </Android.support.design.widget.CollapsingToolbarLayout>

    </Android.support.design.widget.AppBarLayout>

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <Android.support.design.widget.TabLayout
            Android:id="@+id/content_tabs"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />

        <Android.support.v4.view.ViewPager
            Android:id="@+id/viewPager"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1" />
    </LinearLayout>

</Android.support.design.widget.CoordinatorLayout>

Si vous n'avez pas besoin de TabLayout, vous pouvez abandonner LinearLayout et rendre ViewPager autonome. Veillez toutefois à utiliser app:layout_behavior="@string/appbar_scrolling_view_behavior" dans les attributs ViewPager.

Simple Fragment's Layout:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.RecyclerView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/recycler_view"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

Disposition du fragment complexe:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.NestedScrollView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:fillViewport="true"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">
        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/recycler_view"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" />
        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:text="Hello World"/>
    </RelativeLayout>
</Android.support.v4.widget.NestedScrollView>

Exemple d'application: CollapsingToolbarPoc

 enter image description here

17
Ino

vous pouvez essayer comme cela, viewpager fonctionne bien, mais la hauteur du viewpager est fixe.

je suis encore en train de trouver la meilleure solution ...

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:minHeight="800dp"
        Android:orientation="vertical">

        <Android.support.v4.view.ViewPager
            Android:id="@+id/pager"
            Android:layout_width="match_parent"
            Android:layout_height="0dp"
            Android:layout_weight="1"/>
    </LinearLayout>
</Android.support.v4.widget.NestedScrollView>
13
Paul

J'ai eu le même problème, et juste corrigé avec quelques modifications. ViewPager ne fonctionne pas dans NestedScrollView. Mettez simplement votre ViewPager comme un enfant direct de votre CoordinatorLayout. Ensuite, le contenu de pour chaque fragment de ViewPager doit être placé dans NestedScrollView. C'est tout. 

10
BST Kaal

Vous n'avez pas besoin d'utiliser NestedScrollView pour avoir les effets de parallaxe . Essayez quelque chose comme ça:

<Android.support.design.widget.CoordinatorLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:animateLayoutChanges="true">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/my_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <Android.support.design.widget.TabLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:id="@+id/my_tab_layout"
            Android:fillViewport="false"
            app:tabMode="fixed"/>
     </Android.support.design.widget.AppBarLayout>

            <Android.support.v4.view.ViewPager
                Android:id="@+id/my_view_pager"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</Android.support.design.widget.CoordinatorLayout>
5
Pedro Henrique

J'ai retiré NestedScrollView de la présentation principale et inséré en tant que Parent dans tous mes Fragment dispositions qui devaient être chargées dans ViewPager corrigé ce problème pour moi. 

3
Riddhish Ojha

Utilisez la classe personnalisée ci-dessous pour résoudre votre problème. N'oubliez pas d'appeler la méthode onRefresh () sur pagechangelistener.

public class ContentWrappingViewPager extends ViewPager
{
    private int width = 0;
    public ContentWrappingViewPager(Context context) {
        super(context);
    }

    public ContentWrappingViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int height = 0;
        width = widthMeasureSpec;
        if (getChildCount() > getCurrentItem()) {
            View child = getChildAt(getCurrentItem());
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            if(h > height) height = h;
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public void onRefresh()
    {
        try {
            int height = 0;
            if (getChildCount() > getCurrentItem()) {
                View child = getChildAt(getCurrentItem());
                child.measure(width, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
                int h = child.getMeasuredHeight();
                if(h > height) height = h;
            }

            int heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
            ViewGroup.LayoutParams layoutParams = this.getLayoutParams();
            layoutParams.height = heightMeasureSpec;
            this.setLayoutParams(layoutParams);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
3
Kuldeep Sakhiya

J'avais un problème similaire (mais sans CollapsingToolbarLayout, juste une simple Toolbar + TabLayout dans la AppBarLayout). Je voulais que la barre d’outils disparaisse de la vue lorsque vous faites défiler le contenu d’une ViewPager dans la NestedScrollView.

Ma mise en page ressemblait à ceci:

<Android.support.design.widget.CoordinatorLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Android.support.design.widget.AppBarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:animateLayoutChanges="true">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/my_toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|enterAlways"/>

            <Android.support.design.widget.TabLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:id="@+id/my_tab_layout"
                Android:fillViewport="false"
                app:tabMode="fixed"/>
         </Android.support.design.widget.AppBarLayout>

         <Android.support.v4.widget.NestedScrollView
                Android:id="@+id/container"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:fillViewport="true"
                Android:layout_gravity="fill_vertical"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">

                <Android.support.v4.view.ViewPager
                    Android:id="@+id/my_view_pager"
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                     app:layout_behavior="@string/appbar_scrolling_view_behavior">
                </Android.support.v4.view.ViewPager>
         </Android.support.v4.widget.NestedScrollView>

</Android.support.design.widget.CoordinatorLayout>

Cette mise en page ne fonctionnait pas comme prévu, mais je l'ai résolue en supprimant simplement NestedScrollView et en utilisant LinearLayout à la place. Cela a immédiatement fonctionné pour moi sur Android Support Library v23.1.0. Voici comment la mise en page a fini:

<Android.support.design.widget.CoordinatorLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Android.support.design.widget.AppBarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:animateLayoutChanges="true">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/my_toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|enterAlways"/>

            <Android.support.design.widget.TabLayout
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:id="@+id/my_tab_layout"
                Android:fillViewport="false"
                app:tabMode="fixed"/>
         </Android.support.design.widget.AppBarLayout>

         <LinearLayout
            Android:orientation="vertical"
            Android:id="@+id/container"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_marginBottom="4dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

                <Android.support.v4.view.ViewPager
                    Android:id="@+id/my_view_pager"
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                     app:layout_behavior="@string/appbar_scrolling_view_behavior">
                </Android.support.v4.view.ViewPager>
         </LinearLayout>

</Android.support.design.widget.CoordinatorLayout>

PS: Ce sont en fait deux fichiers de mise en page dans mon projet. Je les ai copiés et collés ici et j'ai essayé de les structurer de manière à ce que cela ressemble à un fichier unique. Je suis désolé si j'ai foiré pendant le copier-coller, mais s'il vous plaît, laissez-moi savoir si c'est le cas afin que je puisse le réparer.

2
Cramps

Ce qui suit devrait assurer la bonne hauteur du téléavertisseur. Le fragment est le premier fragment fourni par le téléavertisseur de vue.

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="horizontal">

        <Android.support.v4.view.ViewPager
            Android:id="@+id/viewPager"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"/>

        <fragment
            class="com.mydomain.MyViewPagerFragment"
            Android:id="@+id/myFragment"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:visibility="gone"/>

    </LinearLayout>

</Android.support.v4.widget.NestedScrollView>
2
Jon

J'ai le même souhait, imbriquer une ViewPager dans une NestedScrollView. Mais ça ne marche pas non plus pour moi. Dans mon cas, la ViewPager est à l'intérieur d'une Fragment afin que je puisse changer de contenu en fonction des interactions avec le tiroir. Bien entendu, AppBar, collapse, etc. et toutes les nouvelles fonctionnalités de la bibliothèque de support doivent fonctionner.

Si un utilisateur fait défiler verticalement une page du pageur, je souhaite que les autres pages soient défilées de la même manière, afin de lui donner l’impression générale que le pageur lui-même a défilé. 

Ce que j’ai fait, ce qui fonctionne, c’est que je n’intègre plus la ViewPager dans une NestedScrollView, mais le contenu des fragments contenus dans une NestedScrollView

Ensuite, en cas de défilement dans un fragment, j’informe le conteneur de la nouvelle position de défilement, qui le stocke. 

Enfin, lors d’un glissement à gauche ou à droite du pageur (en utilisant addOnPageChangeListener pour rechercher les états de traînée), j’informe le fragment gauche ou droit de la cible où il doit défiler (en fonction de la connaissance du conteneur) pour s’aligner du fragment dont je viens. .

1
François Perret

il suffit de mettre cette ligne dans NestedScrollView

Android:fillViewport="true"
1
gholam

J'avais une mise en page avec une barre d'outils d'applications avec NestedScrollView en dessous, puis dans la barre d'outils imbriquée, il y avait un LinearLayout, en dessous de LinearLayout, un pageur de vue. L'idée était que LinearLayout à l'intérieur de NestedScrollView ait été corrigé - vous pouvez glisser à gauche/à droite entre les vues du pageur de vues, mais ce contenu ne bouge pas, au moins horizontalement Vous devriez toujours pouvoir faire défiler tout le contenu verticalement à cause de la vue de défilement imbriquée. C'était l'idée. J'ai donc défini la taille imbriquée de NestedScrollView sur match_parent, le remplissage de la fenêtre d'affichage, puis toutes les mises en page enfants/ViewPager sur wrap_content.

Dans ma tête c'était juste. Mais cela n'a pas fonctionné - ViewPager m'a permis d'aller à gauche/à droite, mais pas de défilement vertical, que le contenu de la page du viewpager soit poussé en dessous du bas de l'écran actuel ou non. Il s’avère que c’est essentiellement parce que ViewPager ne respecte pas wrap_content sur ses différentes pages.

J'ai résolu ce problème en sous-classant ViewPager pour le faire changer de hauteur en fonction de l'élément actuellement sélectionné, le forçant ainsi à se comporter comme layout_height = "wrap_content":

public class ContentWrappingViewPager extends ViewPager {

    public ContentWrappingViewPager(Context context) {
        super(context);
    }

    public ContentWrappingViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int height = 0;
        if (getChildCount() > getCurrentItem()) {
            View child = getChildAt(getCurrentItem());
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            if(h > height) height = h;
        }

        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

La solution a été inspirée par cette réponse . Travaillé pour moi!

1
Breeno

Je connais une solution qui fonctionne: vous utilisez Activity, avec CoordinatorLayout et vous utilisez FrameLayout, conteneur. Ensuite. utilisez le gestionnaire de fragments pour mettre fragment dans un conteneur. Par exemple mon code:

<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:elevation="0dp">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        app:layout_scrollFlags="scroll|enterAlways"
        Android:layout_height="@dimen/toolbar_height"
        Android:background="?attr/colorPrimary"
        Android:gravity="center">

    </Android.support.v7.widget.Toolbar>


</Android.support.design.widget.AppBarLayout>

<FrameLayout
    Android:id="@+id/container"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</FrameLayout>

Et fragment:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context="com.improvemdia.inmyroom.MainFragment">

<Android.support.v4.view.ViewPager
    Android:id="@+id/pager"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

Ensuite, utilisez FragmentManager

getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new MainFragment())
            .commit();
0
rz0

Après avoir passé des heures à essayer toutes les suggestions ci-dessus, j'ai finalement réussi à le faire fonctionner. La clé place NestedScrollView dans PageViewer, ET définit layout_behavior sur '@string/appbar_scrolling_view_behavior' pourDEUXvues. La mise en page finale est comme

<CoordinatorLayout>
    <ViewPager app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <NestedScrollView fillViewport="true" app:layout_behavior="@string/appbar_scrolling_view_behavior">
            <Content>...</Content>
        </NestedScrollView>
    </ViewPager>
    <AppBarLayout>...</AppBarLayout>
</CoordinatorLayout>
0
Tranquiliser

En fait, NestedScrollView n'a pas besoin d'être directement frère de CollapsingToolbarLayout dans CoordinatorLayout. J'ai réalisé quelque chose de vraiment bizzare. Appbar_scrolling_view_behavior fonctionne en 2 fragments imbriqués.

Ma mise en page d'activité: 

<Android.support.design.widget.CoordinatorLayout>

    <Android.support.design.widget.AppBarLayout>

            <Android.support.design.widget.CollapsingToolbarLayout>

                <include
                    layout="@layout/toolbar"/>

            </Android.support.design.widget.CollapsingToolbarLayout>

    </Android.support.design.widget.AppBarLayout>

    <FrameLayout
        Android:id="@+id/container"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</Android.support.design.widget.CoordinatorLayout>

Dans le "conteneur" frameLayout j'ai gonflé ce fragment:

<Android.support.constraint.ConstraintLayout>

    ... some content ...

    <Android.support.v4.view.ViewPager/>

    ...

</Android.support.constraint.ConstraintLayout>

Et les fragments à l'intérieur de ViewPager ressemblent à ceci: 

<RelativeLayout>

    <Android.support.v7.widget.RecyclerView/>

    ....

</RelativeLayout>

Le fait que NestedScrollView puisse être si profondément ancré dans la hiérarchie et les comportements de défilement des enfants de CoordinatorLayout a été surpris.

0
Alex Mensak