I cannot comment, so as an independent answer, I will post my additions to JasonWyatt's DisableableAppBarLayoutBehavior.
public class DisableableAppBarLayoutBehavior extends AppBarLayout.Behavior { private boolean mEnabled = true; // enabled by default public DisableableAppBarLayoutBehavior() { super(); } public DisableableAppBarLayoutBehavior(Context context, AttributeSet attrs) { super(context, attrs); } public void setEnabled(boolean enabled) { mEnabled = enabled; } @Override public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes, int type) { return mEnabled && super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type); } @Override public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) { if (!isEnabled()) return; super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type); } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) { if (!isEnabled()) return; super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type); } public boolean isEnabled() { return mEnabled; } }
In addition to onStartNestedScroll, onNestedPreScroll and onNestedScroll are also blocked to avoid unexpected behavior. For example, in my case, calling setExpanded (false, true) in my application panel slowed down the expected behavior and was still expanding with delays. Now it works:
LayoutParams layoutParams = (LayoutParams) context.appBarLayout.getLayoutParams(); ((DisableableAppBarLayoutBehavior)layoutParams.getBehavior()).setEnabled(false); context.appBarLayout.setLayoutParams(layoutParams); context.appBarLayout.setExpanded(false, true);