以编程方式折叠或展开CollapsingToolbarLayout
简单的问题,但我找不到答案。 如何以编程方式折叠或展开CollapsingToolbarLayout
?
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
使用Support Library v23,你可以调用appBarLayout.setExpanded(true/false)
。
更多阅读: AppBarLayout.setExpanded(boolean)
我使用这个代码折叠工具栏。 仍然无法find扩展它的方法。
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); } }
编辑1:负velocityY相同的function, 但工具栏不扩大100%和假的最后一个参数应该工作
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); } }
编辑2:此代码为我做的伎俩
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]); } }
- setTopAndBottomOffset展开工具栏
- onNestedPreScroll在展开的工具栏中显示内容
将尝试自己执行行为。
您可以定义多less扩展或崩溃与您的自定义animation师。 只需使用setTopAndBottomOffset(int)。
这里是一个例子:
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(); }
我写了一个AppBarLayout
的小扩展。 它允许使用和不使用animation来展开和折叠CollapsibleToolbarLayout
。 这似乎是正确的做法。
随意尝试一下。
只需使用它来代替你的AppBarLayout
,你可以调用负责展开或折叠CollapsingToolbarLayout
。
它的工作方式与我的项目完全一样,但是你可能需要调整perform...
方法(特别是在performExpandingWithAnimation()
)中的performExpandingWithAnimation()
/ scroll值来完全符合你的CollapsibleToolbarLayout
。
对于那些想要使用onNestedPreScroll并获得像我一样的错误的人。 我在onCreate中得到了NullPointerException,并且没有这一行
CoordinatorLayout coordinator =(CoordinatorLayout)findViewById(R.id.tab_maincontent); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); //below line params.setBehavior(new AppBarLayout.Behavior() {});
并不能正确地与此工作。 但我解决这个问题
在onCreate:
scrollToolbarOnDelay();
和…
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); }
使用mAppBarLayout.setExpanded(true)
展开工具栏并使用mAppBarLayout.setExpanded(false)
折叠工具栏。
如果您想以编程方式更改CollapsingToolbarLayout高度,则只需使用mAppBarLayout.setLayoutParams(params)
;
扩大:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); params.height = 3*200; // HEIGHT mAppBarLayout.setLayoutParams(params); mAppBarLayout.setExpanded(true);
坍方:
CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); params.height = 3*80; // HEIGHT mAppBarLayout.setLayoutParams(params); mAppBarLayout.setExpanded(false);