que - com.android.support:design 26
CoordinatorLayout usando el ViewPager''s RecyclerView (6)
Estoy usando la vista CoordinatorLayout
de android.support.design
. Quiero adjuntar la app:layout_behavior
al RecyclerView
del fragmento?
En el ejemplo dado por Google, solo lo adjuntan en el RecyclerView
del mismo archivo XML donde se adjuntó el CoordinatorLayout
.
¿Hay alguna manera de adjuntar CoordinatorLayout
al RecyclerView
del fragmento dentro del ViewPager
?
La muestra está en esta entrada de blog en el blog de desarrolladores de Android.
Chris Banes ha publicado una muestra en Github que muestra exactamente lo que quieres hacer.
Aquí está el archivo xml que define cómo se puede adjuntar indirectamente un diseño de coordinador a los fragmentos del 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>
La idea es permitir que el viewpager tenga el atributo layout_behavior.
Después de algunas pruebas, encontré que poner el TabLayout fuera de AppBarLayout, funcionará, independientemente de lo que contenga el Fragmento de viewpager. Este es mi 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>
Esto podría ser tonto, pero no funcionó debido al hecho de que la herramienta de compilación no se actualizó en el build.gradle
de la versión de la aplicación a 22, estaba usando 21 por lo que no está funcionando como se esperaba.
Editar:
También lo que dijo SanderTuit: agregar com.android.support:recyclerview-v7:22.2.0
también solucionará el problema
Estoy teniendo el mismo problema, resolví el desplazamiento, pero coloqué la barra de herramientas y las pestañas dentro de la barra de la aplicación y la envolví y el viewpager con un coordinatorlayout. También en el diseño de mi vista de reciclaje (para inflar) añado el layout_behavior. Funciona pero el problema es que todo está superado.
Esta es mi pagina principal
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/music_foot"
>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/view_pager"
/>
<view
android:layout_width="match_parent"
android:layout_height="wrap_content"
class="android.support.design.widget.AppBarLayout"
android:id="@+id/appBar"
>
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="#1e88e5"
android:id="@+id/toolbar"
app:layout_scrollFlags="scroll|enterAlways"
></android.support.v7.widget.Toolbar>
<view
android:layout_width="match_parent"
android:layout_height="56dp"
class="com.astuetz.PagerSlidingTabStrip"
android:id="@+id/pager_tabs"
android:layout_below="@+id/appBar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</view>
Y este es mi diseño para el adaptador.
<android.support.v7.widget.RecyclerView
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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/recycleView" />
Si lo hago funcionar mejor te lo diré.
Hace poco tuve el mismo problema mencionado en la publicación y las soluciones anteriores no funcionaron para mí. Por suerte logré solucionarlo. Así que solo para compartir estoy publicando aquí.
El problema era que en mi código había establecido
recyclerView.setNestedScrollingEnabled(false);
debido a que la barra de aplicaciones no respondía a los rollos de recyclerView a pesar de haber configurado el atributo layout_behaviour en viewPager. Cambiando el atributo arriba mencionado a
recyclerView.setNestedScrollingEnabled(true);
Resolvió el problema y la barra de aplicaciones comenzó a responder al desplazamiento de recylerView.
Use un FrameLayout e inyecte su fragmento en ese FrameLayout. A continuación, establezca app: layout_behavior en él. Lo único que debe hacer es establecer layout_behavior en un hermano de AppBayLayout y ese hermano estará debajo de la barra de herramientas.
<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>