簡単な質問ですが、答えが見つかりません。 CollapsingToolbarLayout
をプログラムで折りたたむまたは展開するにはどうすればよいですか?
! ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Support Library 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]);
}
}
自分で行動を実装しようとします。
あなたはそれがあなたのカスタムアニメーターでどのくらい拡大または縮小するかを定義できます。 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
に小さな拡張子を書きました。それはアニメーションの有無にかかわらずCollapsibleToolbarLayout
の拡張と折りたたみを可能にします。それは全く正しいことのようです。
AppBarLayout
の代わりにそれを使用するだけで、CollapsingToolbarLayout
の展開や折りたたみを担当するメソッドを呼び出すことができます。
私のプロジェクトでは期待通りに動いていますが、あなたのCollapsibleToolbarLayout
にぴったり合うようにperform...
メソッド(特にperformExpandingWithAnimation()
)の中のfling/scroll値を微調整する必要があるかもしれません。
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 heightを変更したい場合は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);
これを試して...
展開
appBarLayout.setExpanded(true, true);
思い出すために
appBarLayout.setExpanded(false, true);
私はこれを使っています
private fun collapseAppbar() {
scrollView.postDelayed(Runnable {
scrollView?.smoothScrollTo(50, 50)
}, 400)
}
これは展開したり折りたたんだりするのに役立ちます。
appBarLayout.setActivated(true);
appBarLayout.setExpanded(true, true);