Suppose I have these elements in the activity:
Based on @android developer solution which sometimes expand the app bar when list is fully scrolled I made a small change expanding or collapsing the list depending on the scrolled amount (if it's bigger than the header height then expand).
mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.appbar_height);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
mAppBar.setExpanded(mScrolledAmount < mHeaderHeight , true);
break;
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
mScrolledAmount += dy;
}
});
EDIT: What works even better for me is having different thresholds to expand and collapse
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
if (mScrolledAmount < 50){
mAppBar.setExpanded(true , true);
}
if (mScrolledAmount > mHeaderHeight) {
mAppBar.setExpanded(false, true);
}
break;
}