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>
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);
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:
Ajoutez Android:fillViewport="true"
dans votre NestedScrollView
. période.
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>
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
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>
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.
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>
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.
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();
}
}
}
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.
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>
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. .
il suffit de mettre cette ligne dans NestedScrollView
Android:fillViewport="true"
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!
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();
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>
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.