CollapsingToolbarLayout exitUntilCollapsed вызывает проблему макета с NestedScrollView

У меня есть простая сворачивающаяся панель инструментов внутри фрагмента, который находится внутри пейджера с вкладками:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false"
    tools:context=".MainActivity">


     <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="192dp"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:expandedTitleMarginBottom="80dp"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            android:background="@color/red">

            <android.support.v7.widget.Toolbar
                android:id="@+id/anim_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
        </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">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


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

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

Когда мой фрагмент загружается впервые, все работает нормально, но когда фрагмент снова отображается после переключения между вкладками, я больше не могу прокручивать до самого низа NestedScrollView. Отсутствующий раздел моего контента имеет ту же высоту, что и панель инструментов (изменение высоты панели инструментов изменяет высоту отсутствующего раздела).

Вот вид без прокрутки:

введите описание изображения здесь

При прокрутке вниз раздел не отображается, в этом примере есть еще один TextView Text 6, который находится за пределами экрана и недоступен.

введите описание изображения здесь

На некоторых вкладках (у меня их 6) я никогда не могу получить доступ к отсутствующему разделу, на других это происходит по схеме:

  1. Можно прокрутить вниз
  2. Сменить вкладку и обратно
  3. Невозможно прокрутить вниз
  4. Измените несколько вкладок, чтобы фрагмент был убит
  5. Фрагмент повторно раздувается при повторном выборе вкладки
  6. Можно прокрутить вниз

Любая помощь будет оценена по достоинству.


comment
Вы пытались удалить все файлы fitsSystemWindows?   -  person natario    schedule 28.10.2015
comment
Также: используйте app:layout_scrollFlags=scroll|enterAlways|enterAlwaysCollapsed|exitUntilCollapsed на CTL и удалите флаги прокрутки на панели инструментов.   -  person natario    schedule 28.10.2015
comment
Я играл с fitsSystemWindows, да, для него нужно установить значение false из-за проблемы с TabBarLayout в содержащем представлении stackoverflow.com/questions/33100985/   -  person Leon    schedule 29.10.2015
comment
К сожалению, изменения флага не повлияли!   -  person Leon    schedule 29.10.2015
comment
Да, удаление равнозначно установке значения false. Это кажется простой проблемой, но ее трудно воспроизвести. Не могли бы вы загрузить свой проект куда-нибудь? Или, по крайней мере, опубликуйте свои зависимости компиляции.   -  person natario    schedule 29.10.2015
comment
Я оставил его равным false, чтобы убедиться, что я по ошибке не добавлю его снова в true! Я не могу загрузить проект, так как он предназначен для клиента, обратите внимание на зависимости support:appcompat-v7:23.1.0, support:support-v4:23.1.0 support:design:23.1.0 gms:play-services:8.1 .0   -  person Leon    schedule 29.10.2015
comment
На каком уровне API вы тестируете?   -  person natario    schedule 29.10.2015
comment
API 19, мы делаем киоск-приложение, поэтому сейчас я тестирую его только на одном устройстве.   -  person Leon    schedule 29.10.2015
comment
@ Леон, ты решил свою проблему?   -  person Abhinav Chauhan    schedule 23.11.2019
comment
@AbhinavChauhan Это было недавно, но я думаю, что не нашел решения, нет.   -  person Leon    schedule 25.11.2019


Ответы (3)


Попробуйте эти изменения. Посмотрите на различия.

<android.support.design.widget.AppBarLayout
    android:layout_height="192dp"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout

        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

        <android.support.v7.widget.Toolbar
            android:layout_height="?attr/actionBarSize"/>

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


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

    <LinearLayout
        android:layout_height="match_parent">
    </LinearLayout>

</android.support.v4.widget.NestedScrollView>
person user5483281    schedule 24.10.2015
comment
Хотите верьте, хотите нет, но на самом деле все стало только хуже. Добавление fitsSystemWindows=true к NestedScrollView не дало никакого эффекта, но wrap_content в CollapsingToolbarLayout увеличил размер обрезанной области и сломал мою сворачивающуюся панель инструментов. Панель инструментов изменила цвет, а заголовок исчез из сворачивающейся панели инструментов. Спасибо за попытку. - person Leon; 26.10.2015

Вы вызывали setSupportActionBar(your_anim_toolbar)?
Убедитесь, что эта строка есть в вашем коде, и вы должны добавить ее сразу после Activity#setContentView (или внутри Fragment#onCreateView).

person Khang .NT    schedule 19.05.2018

Для всеобщего сведения, так как у меня была такая же проблема. Это известная проблема, исправленная в com.google.android.material:material:1.3.0-alpha04.

https://github.com/material-components/material-components-android/commit/a21a30026a33fc20cf7ad699d32d1298b84096c6

Также связано с невозможностью полной прокрутки внутри вложенный прокрутку

person Alessandro Mulloni    schedule 26.11.2020