Question simple, mais je ne trouve pas de réponse. Comment puis-je réduire ou développer la CollapsingToolbarLayout
par programme?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
À l'aide de Support Library v23, vous pouvez appeler appBarLayout.setExpanded(true/false)
.
Pour en savoir plus: AppBarLayout.setExpanded (boolean)
J'utilise ce code pour réduire la barre d'outils. Je n'arrive toujours pas à trouver un moyen de l'étendre.
public void collapseToolbar(){
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null) {
behavior.onNestedFling(rootLayout, appbarLayout, null, 0, 10000, true);
}
}
Edit 1: La même fonction avec vélocité négativeY mais la barre d'outils n'est pas développée à 100% et false pour le dernier param devrait fonctionner
public void expandToolbar(){
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null) {
behavior.onNestedFling(rootLayout, appbarLayout, null, 0, -10000, false);
}
}
Edit 2: Ce code fait l'affaire pour moi
public void expandToolbar(){
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null) {
behavior.setTopAndBottomOffset(0);
behavior.onNestedPreScroll(rootLayout, appbarLayout, null, 0, 1, new int[2]);
}
}
Je vais essayer de mettre en œuvre le comportement par moi-même.
Vous pouvez définir l’agrandissement ou la réduction de votre animation personnalisée . Utilisez simplement la setTopAndBottomOffset(int)
.
Voici un exemple:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBar.getLayoutParams();
final AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
ValueAnimator valueAnimator = ValueAnimator.ofInt();
valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
behavior.setTopAndBottomOffset((Integer) animation.getAnimatedValue());
appBar.requestLayout();
}
});
valueAnimator.setIntValues(0, -900);
valueAnimator.setDuration(400);
valueAnimator.start();
}
J'ai écrit une petite extension à AppBarLayout
. Il permet d’élargir et de réduire la CollapsibleToolbarLayout
avec et sans animation. Il semble que tout se passe bien.
Utilisez-le simplement à la place de votre AppBarLayout
et vous pourrez appeler des méthodes chargées de développer ou de réduire la CollapsingToolbarLayout
.
Cela fonctionne exactement comme prévu dans mon projet, mais vous devrez peut-être ajuster les valeurs fling/scroll dans les méthodes perform...
(en particulier dans performExpandingWithAnimation()
) pour qu'elles correspondent parfaitement à votre CollapsibleToolbarLayout
.
pour ceux qui veulent travailler avec onNestedPreScroll et obtenir une erreur comme moi ...__
CoordinatorLayout coordinator =(CoordinatorLayout)findViewById(R.id.tab_maincontent);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
//below line
params.setBehavior(new AppBarLayout.Behavior() {});
et ne fonctionne pas correctement avec cela . mais je contourner ce problème avec
dans onCreate:
scrollToolbarOnDelay();
et...
public void scrollToolbarOnDelay() {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.tab_appbar);
CoordinatorLayout coordinator = (CoordinatorLayout) findViewById(R.id.tab_maincontent);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if(behavior!=null)
behavior.onNestedPreScroll(coordinator, appBarLayout, null, 0, 100, new int[]{0, 0});
else
scrollToolbarOnDelay()
}
}, 100);
}
Utilisez mAppBarLayout.setExpanded(true)
pour développer la barre d’outils et mAppBarLayout.setExpanded(false)
pour la réduire.
Si vous souhaitez modifier CollapsingToolbarLayout height par programme, utilisez simplement mAppBarLayout.setLayoutParams(params)
;
Développer:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*200; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(true);
Effondrer:
CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*80; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(false);
Essaye ça...
Développer
appBarLayout.setExpanded(true, true);
Rappeler
appBarLayout.setExpanded(false, true);
j'ai utiliser cela
private fun collapseAppbar() {
scrollView.postDelayed(Runnable {
scrollView?.smoothScrollTo(50, 50)
}, 400)
}
Cela peut aider à développer ou à s'effondrer:
appBarLayout.setActivated(true);
appBarLayout.setExpanded(true, true);