Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enable/disable toolbar scrolling programmatically when using design support library

I use support design library to show/hide toolbar when scrolling a recyclerView inside a fragment, as mention here https://github.com/codepath/android_guides/wiki/Handling-Scrolls-with-CoordinatorLayout

<?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"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:fitsSystemWindows="true"     tools:openDrawer="start">      <android.support.design.widget.CoordinatorLayout         android:id="@+id/coordinatorLayout"         android:layout_width="match_parent"         android:layout_height="match_parent"         tools:context=".MainActivity">          <android.support.design.widget.AppBarLayout             android:id="@+id/appBarLayout"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:theme="@style/AppTheme.AppBarOverlay">              <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/AppTheme.PopupOverlay"                 app:layout_scrollFlags="scroll|enterAlways"/>          </android.support.design.widget.AppBarLayout>           <FrameLayout             android:id="@+id/flContent"             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="bottom|end"             android:layout_margin="@dimen/fab_margin"             android:src="@android:drawable/ic_dialog_email" />      </android.support.design.widget.CoordinatorLayout>       <android.support.design.widget.NavigationView         android:id="@+id/nav_view"         android:layout_width="wrap_content"         android:layout_height="match_parent"         android:layout_gravity="start"         android:fitsSystemWindows="true"         app:headerLayout="@layout/nav_header_main"         app:menu="@menu/activity_main_drawer" />  </android.support.v4.widget.DrawerLayout> 

It works grate, Now I want to enable/disable toolbar scrolling programmatically because I use fragments and I need to stop this feature for some fragments.

like image 998
Mohamad Shaker Avatar asked Oct 14 '15 14:10

Mohamad Shaker


1 Answers

The Toolbar, being a child of the AppBarLayout, gets its LayoutParams from the AppBarLayout. These layout params have the scroll flags that are set in the XML.

So, you get the AppBarLayout.LayoutParams from the Toolbar, and call setScrollFlags() to change the flags to the value you want.

    Toolbar toolbar = findViewById(R.id.toolbar);  // or however you need to do it for your code     AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();     params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL);  // clear all scroll flags 
like image 113
kris larson Avatar answered Sep 28 '22 15:09

kris larson