回答:
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:速度V が負の同じ関数ですが、ツールバーは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]);
}
}
Behaviorを自分で実装しようとします。
onNestedFling
に設定すると、編集1も機能し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);
}