Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AppBarLayout with FrameLayout container as scrolling content doesn't work

I'm trying to use the newest design library to make my toolbar hide/show on scroll. My issue is the scrolling content I have is in the fragment, I'm just injecting it into the FrameLayout container and it doesn't work. Here's my activity:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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:id="@+id/main_content"     android:layout_width="match_parent"     android:layout_height="match_parent">      <android.support.design.widget.AppBarLayout         android:layout_width="match_parent"         android:layout_height="wrap_content">          <include layout="@layout/layout_toolbar" />      </android.support.design.widget.AppBarLayout>      <FrameLayout         android:id="@+id/container"         android:layout_width="match_parent"         android:layout_height="match_parent"         app:layout_behavior="@string/appbar_scrolling_view_behavior" />  </android.support.design.widget.CoordinatorLayout>  <FrameLayout     android:id="@+id/navigation_drawer_container"     android:layout_width="@dimen/navigation_drawer_width"     android:layout_height="match_parent"     android:layout_gravity="start"     tools:layout="@layout/fragment_nav_drawer_anon" /> 

and my fragment:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">  <android.support.v4.widget.SwipeRefreshLayout     android:id="@+id/pull_to_refresh"     android:layout_width="match_parent"     android:layout_height="match_parent">      <ListView         android:id="@android:id/list"         android:layout_width="match_parent"         android:layout_height="match_parent"/> </android.support.v4.widget.SwipeRefreshLayout>  <TextView     android:id="@android:id/empty"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:textSize="18sp"     android:fontFamily="sans-serif"     android:color="@color/dark_grey"     android:padding="60dp"/> 

and toolbar:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" style="@style/Widget.MyApp.ActionBar" /> 

I'm following official doc and this demo, and still can't figure out how to make it work.

like image 894
wwang Avatar asked May 29 '15 15:05

wwang


2 Answers

Replace your FrameLayout with android.support.v4.widget.NestedScrollView

NestedScrollView is just like ScrollView, but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.

Link to doc

like image 151
Sergio Avatar answered Sep 27 '22 20:09

Sergio


Using FrameLayout as child of CoordinatorLayout works quite well. The toolbar is collapsing like it's supposed to. I had a problem in the beginning, when I used outdated libraries.

Here are the gradle dependencies I'm using right now:

compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.android.support:cardview-v7:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.android.support:design:22.2.0' 

I'm using FrameLayout with the attribute app:layout_behavior="@string/appbar_scrolling_view_behavior" as a child of CoordinatorLayout in an activity's layout. The FrameLayout serves as container for fragments. My fragment layouts' root elements are either a RecyclerView or a NestedScrollView.

Here is the layout of the activity:

    <android.support.design.widget.CoordinatorLayout         android:layout_width="match_parent"         android:layout_height="match_parent"         >      <FrameLayout             android:id="@+id/..."             android:layout_width="match_parent"             android:layout_height="match_parent"             app:layout_behavior="@string/appbar_scrolling_view_behavior"             />      <android.support.design.widget.AppBarLayout             android:layout_height="192dp"             android:layout_width="match_parent"             >         <android.support.design.widget.CollapsingToolbarLayout                 android:layout_width="match_parent"                 android:layout_height="match_parent"                 app:layout_scrollFlags="scroll|exitUntilCollapsed"                 >             <ImageView                     android:id="@+id/.."                     android:layout_width="match_parent"                     android:layout_height="match_parent"                     android:fitsSystemWindows="true"                     android:scaleType="centerCrop"                     android:src="@drawable/..."                     app:layout_collapseMode="parallax"/>             <android.support.v7.widget.Toolbar                     android:id="@+id/toolbar_sessions"                     android:layout_height="?attr/actionBarSize"                     android:layout_width="match_parent"                     app:layout_collapseMode="pin"                     />         </android.support.design.widget.CollapsingToolbarLayout>     </android.support.design.widget.AppBarLayout>  </android.support.design.widget.CoordinatorLayout> 

My first fragment's layout looks like this:

<android.support.v7.widget.RecyclerView     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:scrollbars="vertical"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="..."     /> 

My second fragment's layout looks like this:

<android.support.v4.widget.NestedScrollView     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="..."     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="..."     > ... </android.support.v4.widget.NestedScrollView> 
like image 27
Emanuel Seidinger Avatar answered Sep 27 '22 22:09

Emanuel Seidinger