CoordinatorLayout使用ViewPager的RecyclerView

我正在使用android.support.design的视图CoordinatorLayout 。 我想附加app:layout_behavior到片段的RecyclerView

在Google给出的例子中,他们只将其附加到与CoordinatorLayout相连的同一XML文件的RecyclerView中。

有没有办法将CoordinatorLayout附加到ViewPager的片段的RecyclerView

该示例位于Android开发人员博客的此博客文章中。

Chris Banes在Github上发布了一个示例,它显示了你想要做什么。

以下是定义如何间接地将协调器布局附加到viewpager片段的xml文件。

 <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> 

这个想法是让viewpager具有layout_behavior属性。

这可能是愚蠢的,但它没有奏效,因为构build工具没有在应用程序版本的build.gradle中更新到22,我使用了21,这就是为什么它不按预期工作。

编辑:

另外SanderTuit说:joincom.android.support:recyclerview-v7:22.2.0也将解决问题

使用一个FrameLayout并将你的片段注入到FrameLayout中。 然后设置app:layout_behavior。 你唯一需要做的就是将layout_behavior设置为AppBayLayout的同级,而同级会在工具栏下面。

 <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> 

我最近在post里提到了同样的问题,上面的解决scheme对我来说不起作用。 幸运的是我设法解决了这个问题。 所以只是分享我张贴在这里

问题是在我设置的代码中

 recyclerView.setNestedScrollingEnabled(false); 

由于该应用程序没有响应recyclerView的滚动,尽pipelayout_behaviour属性设置为viewPager。 将上述属性更改为

 recyclerView.setNestedScrollingEnabled(true); 

解决了这个问题,appbar开始响应recylerView的滚动。

经过几次testing,我发现将TabLayout放在AppBarLayout之外,无论viewpager的Fragment包含什么,都可以工作。 这是我的主要xml。

 <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> 

我有同样的问题,我解决了滚动,但把工具栏和标签内的应用程序栏,并包装它和ViewPager协调器布局。 同样在我的回收视图(要膨胀)的布局中,我添加了layout_behavior。 它的工作,但问题是一切都在彼此。

这是我的主页

  <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> 

这是我的适配器的布局

  <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" /> 

如果我能更好的告诉你。