J'utilise la vue CoordinatorLayout
de Android.support.design
. Je veux joindre le app:layout_behavior
au fragment RecyclerView
?
Dans l'exemple donné par Google, ils l'attachent uniquement dans le RecyclerView
du même fichier XML auquel le CoordinatorLayout
était attaché.
Existe-t-il un moyen d'attacher CoordinatorLayout
au RecyclerView
du fragment dans le ViewPager
?
L'exemple est dans cet article de blog à Android blog des développeurs.
Chris Banes a posté un échantillon sur Github qui montre exactement ce que vous voulez faire.
Voici le fichier XML qui définit comment associer indirectement une mise en page de coordinateur aux fragments du viewpager.
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways" />
<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:id="@+id/viewpager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="end|bottom"
Android:layout_margin="@dimen/fab_margin"
Android:src="@drawable/ic_done" />
</Android.support.design.widget.CoordinatorLayout>
L'idée est de laisser au viewpager l'attribut layout_behavior.
Cela peut paraître idiot, mais cela n’a pas fonctionné car l’outil de compilation n’a pas été mis à jour dans le build.gradle
de la version de l’application à 22, j’utilisais 21, c’est pourquoi elle ne fonctionne pas comme prévu.
Modifier:
Aussi ce que SanderTuit a dit: ajouter com.Android.support:recyclerview-v7:22.2.0
va également résoudre le problème
Utilisez un FrameLayout et injectez votre fragment dans ce FrameLayout. Puis définissez app: layout_behavior. La seule chose à faire est de définir layout_behavior sur un frère d'AppBayLayout et que ce dernier apparaisse sous la barre d'outils.
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways" />
<Android.support.design.widget.TabLayout
Android:id="@+id/tabs"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" />
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/frame"
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 récemment eu le même problème mentionné dans le post, et les solutions ci-dessus ne fonctionnaient pas pour moi. Heureusement, j'ai réussi à le résoudre. Alors juste pour partager je poste ici
Le problème était que dans mon code j'avais mis
recyclerView.setNestedScrollingEnabled(false);
raison pour laquelle la barre d’application ne répondait pas aux parchemins de recyclerView malgré la définition de l’attribut layout_behaviour sur viewPager. Changer l'attribut mentionné ci-dessus en
recyclerView.setNestedScrollingEnabled(true);
le problème a été résolu et la barre d’application a commencé à répondre au parchemin de recylerView.
Après quelques tests, j'ai constaté que le fait de placer TabLayout en dehors de AppBarLayout fonctionnerait, quel que soit le fragment de viewpager. Ceci est mon XML principal.
<com.tqmall.legend.konwledge.view.VerticalSwipeRefreshLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/swipe_refreshLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.CoordinatorLayout
Android:id="@+id/coordinator_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#FFE6ECF0">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/kn_main_appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.design.widget.CollapsingToolbarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:contentScrim="@Android:color/black"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<include
layout="@layout/banner_layout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.9" />
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:layout_gravity="bottom"
Android:background="#33000000"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
</Android.support.v7.widget.Toolbar>
</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/main_fragment_issue_list_tab"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
app:tabGravity="center"
app:tabIndicatorColor="#FF2CA2D5"
app:tabPaddingEnd="30sp"
app:tabPaddingStart="30sp"
app:tabSelectedTextColor="#FF2CA2D5"
app:tabTextColor="#FF4F5354" />
<Android.support.v4.view.ViewPager
Android:id="@+id/main_fragment_issue_list_pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</LinearLayout>