Tom*_*mas 151 android android-collapsingtoolbarlayout
简单的问题,但我找不到答案.如何以CollapsingToolbarLayout编程方式折叠或展开?

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

jax*_*xvy 304
使用支持库v23,您可以致电appBarLayout.setExpanded(true/false).
进一步阅读:AppBarLayout.setExpanded(boolean)
Tuấ*_*Anh 48
我使用此代码折叠工具栏.还是找不到扩展它的方法.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑1:具有负速度Y的相同功能,但工具栏未扩展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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑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]);
}
}
Run Code Online (Sandbox Code Playgroud)
将尝试自己实现行为.
小智 24
您可以使用自定义动画制作工具定义它展开或折叠的程度.只需使用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();
}
Run Code Online (Sandbox Code Playgroud)
使用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);
Run Code Online (Sandbox Code Playgroud)
坍塌:
CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
params.height = 3*80; // HEIGHT
mAppBarLayout.setLayoutParams(params);
mAppBarLayout.setExpanded(false);
Run Code Online (Sandbox Code Playgroud)
对于想要使用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() {});
Run Code Online (Sandbox Code Playgroud)
并且无法正常使用此功能.但我解决这个问题
in onCreate:
scrollToolbarOnDelay();
Run Code Online (Sandbox Code Playgroud)
和...
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);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这个...
扩张
appBarLayout.setExpanded(true, true);
Run Code Online (Sandbox Code Playgroud)
回忆一下
appBarLayout.setExpanded(false, true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78021 次 |
| 最近记录: |