包含折叠工具栏

时间:2016-03-03 07:51:51

标签: android android-recyclerview material-design android-nestedscrollview

我正在尝试创建这种布局 -

  1. CollapsingToolbarLayout,其中包含ViewPager类Google Play应用。
  2. 下面有一个网格RecyclerView
  3. 最后,还有另一个ViewPager
  4. 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外面时。

1 个答案:

答案 0 :(得分: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);
        }
    });