2

我想創建這樣一個佈局,其中 -RecyclerView和ViewPager與摺疊式工具

  1. 具有ViewPager像谷歌Play應用一個CollapsingToolbarLayout
  2. 下面有一個網格RecyclerView
  3. 而最後還有另一個ViewPager

RecylerView正常滾動直到CollapsingToolbarLayout擴大時結束。

enter image description here

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 

     <android.support.design.widget.AppBarLayout 
      android:id="@+id/app_bar_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:fitsSystemWindows="true" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

      <android.support.design.widget.CollapsingToolbarLayout 
       android:id="@+id/collapsing_toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:fitsSystemWindows="true" 
       app:contentScrim="?attr/colorPrimary" 
       app:expandedTitleMarginEnd="64dp" 
       app:expandedTitleMarginStart="48dp" 
       app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:fitsSystemWindows="true" 
        android:orientation="vertical" 
        app:layout_collapseMode="parallax"> 

        <TextView 
         android:id="@+id/text_home_active" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_margin="@dimen/margin_normal" 
         android:background="@color/header_bg" 
         android:gravity="center_vertical" 
         android:textColor="@android:color/black" 
         android:textSize="@dimen/title_date_text_size" /> 

        <android.support.v4.view.ViewPager 
         android:id="@+id/viewpager_home" 
         android:layout_width="fill_parent" 
         android:layout_height="170dp" 
         android:layout_gravity="center" 
         android:overScrollMode="ifContentScrolls" /> 
       </LinearLayout> 

       <android.support.v7.widget.Toolbar 
        android:id="@+id/toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:background="@color/color_primary" 
        android:minHeight="?attr/actionBarSize" 
        app:layout_collapseMode="pin" 
        app:theme="@style/ToolBarStyle" /> 

      </android.support.design.widget.CollapsingToolbarLayout> 

     </android.support.design.widget.AppBarLayout> 

     <android.support.v4.widget.NestedScrollView 
      android:id="@+id/scroll" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clipToPadding="false" 
      android:fillViewport="true" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" 
       android:weightSum="3"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="0dp" 
        android:layout_weight="2" 
        android:orientation="vertical"> 

        <TextView 
         android:id="@+id/text_home_popular" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:background="@color/header_bg" 
         android:gravity="center_vertical" 
         android:padding="@dimen/margin_normal" 
         android:textColor="@android:color/black" 
         android:textSize="@dimen/title_date_text_size" /> 

        <android.support.v7.widget.RecyclerView 
         android:id="@+id/grid_home_popular" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:clipToPadding="false" 
         android:scrollbars="none" 
         app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

       </LinearLayout> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="0dp" 
        android:layout_gravity="bottom" 
        android:layout_weight="1" 
        android:elevation="5dp" 
        android:orientation="vertical"> 

        <TextView 
         android:id="@+id/text_home_offers" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_margin="@dimen/margin_normal" 
         android:gravity="center_vertical" 
         android:text="@string/text_home_offers" 
         android:textColor="@android:color/black" 
         android:textSize="@dimen/title_date_text_size" /> 

        <android.support.v4.view.ViewPager 
         android:id="@+id/viewpager_home_offers" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center" 
         android:overScrollMode="ifContentScrolls" /> 
       </LinearLayout> 

      </LinearLayout> 
     </android.support.v4.widget.NestedScrollView> 
    </android.support.design.widget.CoordinatorLayout> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerViewNavigation" 
     android:layout_width="300dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:background="#ffffff" 
     android:scrollbars="none" /> 

</android.support.v4.widget.DrawerLayout> 

我的問題是工具欄崩潰只有當我移動RecyclerView之外。

+0

當'RecyclerView'正在滾動時,您是否希望將底部ViewPager固定在底部?另外,你的底部'ViewPager'具有'android:layout_height =「wrap_content」'。這是爲你工作嗎?我對「ViewPager」的理解是它不尊重單個頁面想要的高度。 –

+0

你能否提供更多關於「只有當我移出RecyclerView時工具欄摺疊」的細節?我試圖描繪實際發生的事情。 –

+0

@ krislarson其實我卡在recyclerview和崩潰工具欄,我沒有在bottomviewpager工作。我正在滾動它正在滾動的recyclerview,但對於工具欄來說,我必須在recyvlerview的上方或下方提供滾動手勢。 – mjosh

回答

0

該解決方案解決了我的問題。

所以簡單地說,當Appbar完全展開時,不允許回收器視圖滾動,而是使用NestedScrollView的滾動,否則Recycler View將正常滾動。

appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { 
     @Override 
     public void onStateChanged(AppBarLayout appBarLayout, State state) { 
      if (state == State.COLLAPSED) 
       mRecyclerView.setNestedScrollingEnabled(true); 
      if (state == State.EXPANDED) 
       mRecyclerView.setNestedScrollingEnabled(false); 
     } 
    });