Подтвердить что ты не робот

CollapsingToolbar не работает с не очень высоким содержанием контента

Я уверен, что это ошибка, поэтому я прошу об обходном пути. Мой макет похож:

<CoordinatorLayout>

    <AppBarLayout>
        <CollapsingToolbarLayout>
            <ImageView/>
            <Toolbar/>
        </CollapsingToolbarLayout>
    </AppBarLayout>

    <android.support.v4.widget.NestedScrollView/> <!-- content here -->

</CoordinatorLayout>

Я получаю контент из Интернета, и я не знаю, насколько высок он будет - может быть несколько строк, может быть очень длинным. Однако я обнаружил, что CollapsingToolbar не работает, когда контент недостаточно велик для покрытия всего экрана. Случаи:

  • content.height > screen.height: работает; swiping top/bottom расширяет и сворачивает панель инструментов, а также прокручивает содержимое;

  • content.height < screen.height: нет. Это не хорошо, потому что большую часть времени (content.height + expandedToolbar.height) > screen.height!

Другими словами, если контент не достаточно высок, , даже если контент + расширенный Toolbar намного выше, чем весь экран, он не реагирует на жестов прокрутки и показывает некоторые ошибки - может потребоваться десять жестов, чтобы немного свернуть панель инструментов. Таким образом, вы вряд ли сможете попасть в нижнюю часть содержимого, которая скрыта внизу, потому что панель инструментов расширена.

Любое обходное решение?

Если вы хотите попробовать, просто возьмите cheesesquare образец проекта и удалите (или уменьшите) содержимое внутри NestedScrollView в activity_detail.xml [API17 здесь ]

4b9b3361

Ответ 1

Трюк состоит в том, чтобы добавить android:layout_gravity="fill_vertical" в NestedScrollView. Таким образом, панель инструментов сглаживается и плавно расширяется и реагирует на жесты прокрутки для любого непустого NestedScrollView, независимо от его размера.

Конечно, если вид прокрутки пуст, панель инструментов не скроется, прокручивая часть содержимого на экране. Но для меня это не так плохо.

Update

Похоже, это решение имеет некоторые проблемы с большим содержимым, так как самая нижняя часть содержимого останется скрытой. Я мог обнаружить, что скрытая часть (как представляется,) настолько велика, как рухнула высота панели инструментов. Это упрощает определение обходного пути - просто добавьте маркер к нижней части ScrollView, чтобы он измерился и выпустил нижнюю скрытую часть. Таким образом:

android:layout_gravity="fill_vertical"
android:layout_marginBottom="?attr/actionBarSize"

или любой размер, который вы указали в Toolbar в своем представлении. Обратите внимание, что это решение хорошо подходит для небольшого и большого содержимого, но прокрутка не так гладко с меньшими.

Update2 (июль 2015 г.)

Из ранних тестов, похоже, эта ошибка была исправлена ​​в выпуске v22.2.1 библиотеки Design Design.