7

My Activity XML is

<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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

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

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/colorPrimary"
                android:title="@string/app_name"
                app:layout_scrollFlags="scroll|enterAlways"/>
        </android.support.design.widget.AppBarLayout>

        <FrameLayout
            android:id="@+id/fragmentContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />

    </LinearLayout>


    <android.support.design.widget.NavigationView
        android:id="@+id/drawerNavigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemTextColor="@color/navview_text_color"
        app:menu="@menu/home_drawer_items_menu"/>
</android.support.v4.widget.DrawerLayout>

My Fragment XML is :

  <android.support.design.widget.CoordinatorLayout
    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">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|enterAlways"/>

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

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/black"
        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_margin="@dimen/fab_margin"
        android:clickable="true"
        android:src="@drawable/ic_plus"
        android:tint="@android:color/white"
        app:elevation="5dp"
        app:layout_anchor="@id/viewPager"
        app:layout_anchorGravity="bottom|right|end"/>
</android.support.design.widget.CoordinatorLayout>

My fragment uses tabs and nested fragments inside the ViewPager and my activity uses navigation drawer so i can't move the tabs to activity as the tabs are only needed for this specific fragment. And other fragments just need a toolbar. At the same time all the fragments need to access the navigation drawer.

Now what i want to do is somehow associate app:layout_scrollFlags="scroll|enterAlways" with my activity's toolbar. So that whenever i scroll my RecyclerView inside the fragment the toolbar in the activity gets hidden.

It would be great if you guys can point me in the right direction or help me figure out how to do this ?

Sheraz Ahmad Khilji
  • 8,300
  • 9
  • 52
  • 84
  • 1
    This lib might be able to help you : https://github.com/ksoichiro/Android-ObservableScrollView – Ben-J May 04 '16 at 09:23
  • @Ben-J thanks for the library it seems to be a good workaround but its still missing the animation that happens when we are using `app:layout_scrollFlags="scroll|enterAlways"` – Sheraz Ahmad Khilji May 04 '16 at 10:11

3 Answers3

0

If I understand your question correctly what you can do is

1) Include the Toolbar and NavigationDrawer in MainActivity so it will be accessible in all fragments too.

2) Include tabs in in only ParentFragment which contains ViewPager for other fragments

with this approach your Toolbar and NavigationDrawer will be visible in all fragments while tabs only in ParentFragment

Hope it helps

Atiq
  • 14,435
  • 6
  • 54
  • 69
  • what you said, i have already done that. Please read the question again. I want to hide the toolbar when i scroll recyclerview in fragment. – Sheraz Ahmad Khilji May 04 '16 at 10:04
  • why don't you use [onScrollListener](http://developer.android.com/intl/es/reference/android/support/v7/widget/RecyclerView.OnScrollListener.html)? – Atiq May 04 '16 at 10:15
  • I am using that for now but that still doesnt give me the smooth animation that `app:layout_scrollFlags="scroll|enterAlways"` gives me – Sheraz Ahmad Khilji May 04 '16 at 10:16
  • have you tried built in animation `android:animateLayoutChanges="true"`? I have used it for hiding and showing `AppbarLayout` and it works well – Atiq May 04 '16 at 10:27
  • Yes tried that but it will gives a jerk in ui. Not as smooth as the normal behavior – Sheraz Ahmad Khilji May 04 '16 at 15:40
0

I have solved this issue, though there is still room for some minor improvements like the FAB is moving up and down whenever i scroll RecyclerView inside the Fragment

In order to make toolbar respond to app:layout_scrollFlags="scroll|enterAlways" this is what i did

I changed my Activity XML to:

<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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CoordinatorLayout
        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">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/colorPrimary"
                android:title="@string/app_name"
                app:layout_scrollFlags="scroll|enterAlways"/>
        </android.support.design.widget.AppBarLayout>

        <FrameLayout
            android:id="@+id/fragmentContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            />
    </android.support.design.widget.CoordinatorLayout>


    <android.support.design.widget.NavigationView
        android:id="@+id/drawerNavigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemTextColor="@color/navview_text_color"
        app:menu="@menu/home_drawer_items_menu"/>
</android.support.v4.widget.DrawerLayout>

Also i changed my Fragment XML to:

<LinearLayout
    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"
    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/black"/>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="60dp"
            android:layout_marginEnd="20dp"
            android:layout_marginRight="20dp"
            android:clickable="true"
            android:src="@drawable/ic_plus"
            android:tint="@android:color/white"
            app:elevation="5dp"/>
    </RelativeLayout>
</LinearLayout>
Sheraz Ahmad Khilji
  • 8,300
  • 9
  • 52
  • 84
  • app:layout_scrollFlags="scroll|enterAlways" adding this to the container layout will make the container translate down hence any view graviting bottom inside the fragments will no longer be visible ;( – Sjd Mar 02 '17 at 09:16
-2

Also ran into this problem. But a solution was found. The solution with xml rework can not be, so you need to do it programmatically. All we need is Inflater. Yes, yes, that's so simple. On the fly change xml to work all scrolling. Inflate/AddView/RemoveView - that's all you need!

Trancer
  • 765
  • 2
  • 8
  • 23