CoordintatorLayout - прокручиваемый контент в AppBar и Layout - PullRequest
1 голос
/ 17 мая 2019

Я создаю представление на основе CoordinatorLayout.Представление содержит два элемента: View in CollapsingToolbarLayout и RecyclerView в качестве содержимого.Весь контент также обернут в SwipleRefreshLayout - была проблема с прокруткой вверх, но ее легко исправить (через OnOffsetChangedListener в AppBar)

Моя проблема в том, что представление в CollapsingToolbarLayout может быть выше, чемэкран (очень редкий, но возможный), поэтому его нужно прокручивать.

См. этот пример:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
        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:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

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

                <View android:id="@+id/very_big_height"
                      android:layout_width="match_parent"
                      android:background="@color/design_default_color_primary"
                      android:layout_height="2000dp"/>

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

        <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/dummy_recycler_view"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

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

Когда я прокручиваю через панель инструментов, я могу установить свой макет в таком видесостояние: unexpected behaviour example on device

Синяя область имеет идентификатор very_big_height, и эта белая область фактически является пустым пространством на экране, поскольку мой RecyclerView имеет высоту wrap_content и никаких элементоввнутри.

Я все еще могу прокручивать панель приложений через синюю область, и даже более прокручивать ее полностью за пределами экрана.И если я перетаскиваю его, я не вижу его снова.

Мое ожидаемое поведение: AppBar должен прокручиваться только до нижней части экрана.Он не должен скрываться, если нет содержимого ниже. Кроме того, если содержимое соответствует экрану, панель приложений не должна быть прокручиваемой (я нашел решение для отключения прокрутки, когда нет содержимого, но не работает, когда панель приложений не соответствуетэкран.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Сначала CoordinatorLayout не может отправить событие прокрутки в SwipeRefreshLayout. Вы можете попробовать код в ChildCoordinatorLayout

Во-вторых, вы можете установить соответствие родительского элемента RecyclerView.

0 голосов
/ 24 мая 2019

проблема с прокруткой вызвана родительским представлением, которое SwipetoRefreshLayout, корневое представление вашего xml должно быть CoordinatorLayout.

я не знаю, какова цель использования SwipetoRefreshLayout, но наличие большого количества элементов прокрутки может привести к плохому опыту прокрутки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...