CollapsingToolbarLayout

スクロールの動きとToolbarの表示の連動の仕方にはいろいろある。
前回のように、activity_main.xmlで、

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Toolbar
            android:id="@+id/toolbar1"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:id="@+id/textview_longtext"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/textview_longtext_text" />

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

AppBarLayoutでapp:layout_scrollFlags="scroll|enterAlways"の場合は、

1番下まで行って
1番下まで行って

1番下まで行って、上に戻ろうとすると、

すぐToolbarが出てくる
すぐToolbarが出てくる

すぐToolbarが出てくる。
どんな位置からでも上に戻ろうとしたときにToolbarが連動して出てくる。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Toolbar
            android:id="@+id/toolbar1"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlwaysCollapsed" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:id="@+id/textview_longtext"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/textview_longtext_text" />

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

しかし、app:layout_scrollFlags="scroll|enterAlwaysCollapsed"にすると、

下まで行って
下まで行って

下まで行って、上に戻っても、

出てこない
出てこない

出てこない。

リストの1番上のところまで戻って初めて出てくる
リストの1番上のところまで戻って初めて出てくる

リストの1番上のところまで戻って初めて出てくる。
スクロールにはもうひとつ、

app:layout_scrollFlags="scroll|exitUntilCollapsed"

というフラグがあるが、これはCollapsingToolbarLayoutで使う。

CollapsingToolbarLayout  |  Android Developers
Androidのマテリアルデザイン ~スクロール連動~ (2/3):CodeZine(コードジン)

これらを使うと、Toolbarを伸縮しつつ、一定のところで止める事ができる。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar1"
        android:layout_width="match_parent"
        android:layout_height="200dp" >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed" >

            <Toolbar
                android:id="@+id/toolbar1"
                android:layout_width="match_parent"
                android:layout_height="?android:attr/actionBarSize"
                android:background="@color/colorPrimary"
                app:layout_collapseMode="pin" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:id="@+id/textview_longtext"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/textview_longtext_text" />

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

AppBarLayoutで200dpにすることで、最初の高さは200dpになる。
CollapsingToolbarLayoutを中に入れて、そちらにapp:layout_scrollFlags="scroll|exitUntilCollapsed"を指定。
Toolbarでapp:layout_collapseMode="pin"を指定。
一番小さくなった時の高さは、android:layout_height="?android:attr/actionBarSize"に基づくから、Toolbarのデフォルトの高さのはず。

最初は200dpだからこれぐらい大きくなる
最初は200dpだからこれぐらい大きくなる

最初は200dpだからこれぐらい大きくなる。

下に行くとどんどん小さくなる
下に行くとどんどん小さくなる

下に行くとどんどん小さくなる。

あれ?止まらない・・・。
あれ?止まらない・・・。

あれ?止まらない・・・。

消えてしまった・・・。
消えてしまった・・・。

消えてしまった・・・。
本当ならToolbarの高さより小さくはならないようにどこも書いてあるのだが・・・。

いろいろなCoordinatorLayoutパターン - Qiita

上記の記事などいろいろ見たけど、

android:minHeight="?android:attr/actionBarSize"を付けたら、

ここから
ここから

ここから、

小さくなって
小さくなって

小さくなって、

ここからは小さくならなくなった
ここからは小さくならなくなった

ここからは小さくならなくなった。
でも、付けてない記事もあるので何が違うのだろうか・・・。

Sample/android/CollapsingToolbarLayout/CollapsingToolbarLayout/CollapsingToolbarLayout_ at master · bg1bgst333/Sample · GitHub