support que last android appcompat android-recyclerview android-design-library android-coordinatorlayout

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>