Answers:
使用支持库v23,您可以致电appBarLayout.setExpanded(true/false)
。
我使用此代码折叠工具栏。仍然找不到扩展它的方法。
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:速度Y为负的相同函数,但工具栏未展开100%,最后一个参数为false
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]);
}
}
会尝试自己实施行为。
onNestedFling
来false
。
onNestedFling
在设置片段之前尝试调用。设置片段后,我可以成功调用该方法。
您可以使用自定义动画器定义其扩展或折叠的程度。只需使用即可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();
}
( -900 )
进行设置更好valueAnimator.setIntValues
的解决方案是使用- ( appBar.getTotalScrollRange() )
我为编写了一个小扩展AppBarLayout
。它允许CollapsibleToolbarLayout
在有和没有动画的情况下对两者进行扩展和折叠。它似乎做得很正确。
只需使用它代替您的AppBarLayout
,就可以调用负责扩展或崩溃的方法CollapsingToolbarLayout
。
它的工作完全符合我的项目中的预期,但是您可能需要调整方法中的下移/滚动值perform...
(尤其是中的值performExpandingWithAnimation()
)以完全适合您的CollapsibleToolbarLayout
。
setExpanded
方法AppBarLayout
。
用 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);
对于那些想要使用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);
}