23

新しい CoordinatorLayout/AppBarLayout/CollapsingToolbarLayout パラダイムを使用するフラグメントがあり、折りたたみツールバーが完全に展開されていることを検出して、フラグメント全体に対して操作を実行できるようにしたいと考えています。たとえば、フラグメントのポップなどです。スタックから離れて新しいスタックに移動し、フラグメントを破棄します。私は却下コードを機能させています。いつ、いつ使用しないかを知る必要があります。

AppBarLayout.OnOffsetChangedListenerを少し試してみましたが、うまくいきませんでした。物事が完全に展開されたときを判断するためにそれを使用する方法はありますか、または誰かが知っているより好ましい方法はありますか?

前もって感謝します!

編集: AppBarLayout.setExpanded(...)の実装もいくつかありますが、 AppBarLayout.getExpanded() または同様のものではないため、私もそこで困惑しています。

4

3 に答える 3

47

API には何もないように見えますが、次のように動作しているようです。テストが必要な場合があります。

boolean fullyExpanded =
    (appBarLayout.getHeight() - appBarLayout.getBottom()) == 0;

編集:上記の解決策はうまくいくようですが、アプリバーがスクロールされたときにこの条件をテストしたかったので、次の解決策を使用して終了しましたOnOffsetChangedListener

class Frag extends Fragment implements AppBarLayout.OnOffsetChangedListener {

    private boolean appBarIsExpanded = true;
    private AppBarLayout appBarLayout;

    @Override 
    public void onActivityCreated(Bundle state) {
        super.onActivityCreated(state);
        appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.app_bar);
    }

    @Override
    public void onResume() {
        super.onResume();
        appBarLayout.addOnOffsetChangedListener(this);
    }

    @Override
    public void onStop() {
        super.onStop();
        appBarLayout.removeOnOffsetChangedListener(this);
    }

    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        appBarIsExpanded = (verticalOffset == 0);
    } 

}
于 2015-09-23T13:29:07.750 に答える