177

単純な質問ですが、答えが見つかりません。CollapsingToolbarLayoutプログラムで折りたたんだり展開したりするにはどうすればよいですか?

折りたたまれたツールバー

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

拡張ツールバー

4

10 に答える 10

361

サポート ライブラリ v23 を使用すると、 を呼び出すことができますappBarLayout.setExpanded(true/false)

さらに読む: AppBarLayout.setExpanded(boolean)

于 2015-08-21T09:43:28.997 に答える
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);
    }
}

編集1:負のvelocityYを持つ同じ機能ですが、ツールバーは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 do ツールバーを展開します
  • onNestedPreScroll は、展開されたツールバー内にコンテンツを表示します

自分でBehaviorを実装しようとします。

于 2015-06-10T04:45:12.533 に答える
5

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);


        }
于 2016-04-18T04:40:15.923 に答える
4

これを試して...

拡大

appBarLayout.setExpanded(true, true);

思い出すこと

appBarLayout.setExpanded(false, true);
于 2019-05-13T05:38:36.217 に答える
1

プログラムで AppBarLayout を展開/折りたたむには:

fun expandAppBarLayout(expand: Boolean, isAnimationEnabled: Boolean){
    appBarLayout.setExpanded(expand, isAnimationEnabled);
}
于 2019-11-20T11:08:36.553 に答える