Please cancel my comment above. I have done some research on this, and my suggestion above does not make any difference.
setSupportActionBar(Toolbar), :
public void setSupportActionBar(Toolbar toolbar) {
....
ToolbarActionBar tbab = new ToolbarActionBar(toolbar, ((Activity) mContext).getTitle(),
mAppCompatWindowCallback);
mActionBar = tbab;
....
}
, getSupportActionBar() ToolbarActionBar. , :
setShowHideAnimationEnabled (boolean): , .
@Override
public void setShowHideAnimationEnabled(boolean enabled) {
}
show(): .
@Override
public void show() {
mDecorToolbar.setVisibility(View.VISIBLE);
}
hide(): - , .
@Override
public void hide() {
mDecorToolbar.setVisibility(View.GONE);
}
show() hide() , . , - :
protected void hideActionBar(){
final ActionBar ab = getSupportActionBar();
if (ab != null && ab.isShowing()) {
if(mToolbar != null) {
mToolbar.animate().translationY(-112).setDuration(600L)
.withEndAction(new Runnable() {
@Override
public void run() {
ab.hide();
}
}).start();
} else {
ab.hide();
}
}
}
protected void showActionBar(){
ActionBar ab = getSupportActionBar();
if (ab != null && !ab.isShowing()) {
ab.show();
if(mToolbar != null) {
mToolbar.animate().translationY(0).setDuration(600L).start();
}
}
}
mToolbar.animate()..... . :( .alpha(0(during hide) or 1(during show)), .
:
, getSupportActionBar().show() & hide() , Toolbar . , Toolbar View . , , (& later, show) View. , Activity ( ) Toolbar, . , . ( ) :
int mToolbarHeight, mAnimDuration = 600;
ValueAnimator mVaActionBar;
void hideActionBar() {
if (mToolbarHeight == 0) {
mToolbarHeight = mToolbar.getHeight();
}
if (mVaActionBar != null && mVaActionBar.isRunning()) {
return;
}
mVaActionBar = ValueAnimator.ofInt(mToolbarHeight , 0);
mVaActionBar.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
((AppBarLayout.LayoutParams)mToolbar.getLayoutParams()).height
= (Integer)animation.getAnimatedValue();
mToolbar.requestLayout();
}
});
mVaActionBar.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
}
});
mVaActionBar.setDuration(mAnimDuration);
mVaActionBar.start();
}
void showActionBar() {
if (mVaActionBar != null && mVaActionBar.isRunning()) {
return;
}
mVaActionBar = ValueAnimator.ofInt(0 , mToolbarHeight);
mVaActionBar.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
((AppBarLayout.LayoutParams)mToolbar.getLayoutParams()).height
= (Integer)animation.getAnimatedValue();
mToolbar.requestLayout();
}
});
mVaActionBar.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
if (getSupportActionBar() != null) {
getSupportActionBar().show();
}
}
});
mVaActionBar.setDuration(mAnimDuration);
mVaActionBar.start();
}
I do see an animation now but the space still gets reserved for the toolbar until ab.hide() happens. , AppBarLayout Toolbar. , , - .
, :
if (getSupportActionBar().isShowing()) {
hideActionBar();
} else {
showActionBar();
}