Панель инструментов не будет разрушаться с помощью Scrollview в качестве дочернего элемента CoordinatorLayout

Я пытаюсь следовать Документам Google по использованию CoordinatorLayout, но у меня проблема с ScrollView внутри CoordinatorLayout. В принципе, панель инструментов обычно сжимается с помощью RecyclerView или Listview при прокрутке вниз. Теперь с ScrollView он не рухнет.

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <TextView android:id="@+id/tv_View" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center" android:text="@string/filler" style="@style/TextAppearance.AppCompat.Large" /> </ScrollView> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout> 

    ScrollView не взаимодействует с CoordinatorLayout . Вы должны использовать NestedScrollView вместо ScrollView

    Используйте NestedScrollView, чтобы свернуть ваш scrollview в качестве дочернего элемента компоновки координатора. Замените код на этот код:

     <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_View" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center" android:text="@string/filler" style="@style/TextAppearance.AppCompat.Large" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout> 

    Фактический ответ должен состоять в том, что CoordinatorLayout не работает с ScrollView , потому что ScrollView не реализует интерфейс NestedScrollingChild . NestedScrollView – это ScrollView с реализацией NestedScrollingChild . Если вы хотите узнать больше о вложенной прокрутке, я сделал сообщение в блоге об этом.

    Используйте NestedScrollView вместо обычного ScrollView при использовании CoordinatorLayout .

    Чтобы сделать прокрутку CollapsingToolbarLayout вы можете вызвать поведение прокрутки , установив минимальную высоту дочернего макета NestedScrollView на * 1000dp.

     android:minHeight="1000dp" 

    Планировка:

     <android.support.v4.widget.NestedScrollView app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!--to trigger scroll behavior--> <LinearLayout android:minHeight="1000dp"/> </android.support.v4.widget.NestedScrollView> 

    * Пример SupportDesignDemos здесь: https://github.com/android/platform_development/blob/master/samples/SupportDesignDemos/res/layout/include_appbar_scrollview.xml

    Вы можете сохранить ScrollView и добавить это свойство XML: android:nestedScrollingEnabled="true" поэтому он знает координаторLayout как родного брата, и имейте в виду, что это свойство поддерживается только в версии с леденцом и выше .