package com.koushikdutta.boilerplate; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.FrameLayout; /** * Created by koush on 4/4/15. */ public final class ToolbarUtils { public static void enableToolbarScrollOff(final View toolbar, final AbsListView absListView, final View contentContainer) { absListView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (absListView.getChildCount() < 1) { return; } final View firstView = absListView.getChildAt(0); final int toolbarHeight = toolbar.getHeight(); float percent; if (firstVisibleItem >= 1) { percent = 1f; } else { int y = -firstView.getTop(); y += (firstView.getHeight() * firstVisibleItem); percent = y / (float) (firstView.getHeight() ); } ViewGroup.MarginLayoutParams tlp = (ViewGroup.MarginLayoutParams)contentContainer.getLayoutParams(); if (firstVisibleItem == 0) { int remainder = firstView.getHeight() + firstView.getTop(); // if there's less than toolbar height left, start scrolling off. if (remainder < toolbarHeight) { remainder = toolbarHeight - remainder; tlp.topMargin = -remainder; contentContainer.setLayoutParams(tlp); } else { tlp.topMargin = 0; contentContainer.setLayoutParams(tlp); } return; } tlp.topMargin = -toolbarHeight; contentContainer.setLayoutParams(tlp); } }); } }