CoordinatorLayout как декорация верхнего уровня, когда NavHostFragment содержит представления без прокрутки

Я пытаюсь создать приложение с одним действием с общим хромом (панель инструментов и т. Д.) В действии.

Я хотел бы использовать компоненты Google (CoordinatorLayout и AppBarLayout), чтобы использовать функцию автоматического скрытия панели инструментов, которая скрывает / показывает при прокрутке содержимого. Это очень важно для «домашнего» пункта назначения приложения, у которого есть пейджер просмотра с прокручиваемым контентом на каждой странице.

Я установил для NavHostFragment layout_behavior рекомендуемое поведение прокрутки, но это не работает, когда фрагмент без прокрутки занимает NavHostFragment. В таком случае содержимое фрагмента сдвигается вниз (отсекая нижнюю часть), чтобы освободить место для панели инструментов в макете действия.

Схема действия:

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:elevation="0dp">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_scrollFlags="scroll|snap|enterAlways"/>

    </com.google.android.material.appbar.AppBarLayout>

    <fragment
        android:id="@+id/nav_host_main"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:navGraph="@navigation/nav_graph_main"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Домашний пункт назначения с прокручиваемым содержимым (ViewPager2 с RecyclerView на каждой странице) работает должным образом. Панель инструментов скрывается / отображается, как и ожидалось.

Однако, когда я перехожу к другому месту назначения, в котором нет прокручиваемого содержимого (это просто ConstraintLayout с высотой match_parent и дочерними представлениями, привязанными к нижней и верхней части макета), содержимое обрезается внизу.

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

Проблема, которую я вижу, заключается в том, что NavHostFragment расположен под панелью инструментов, а не за ней (из-за поведения прокрутки).

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

Есть предположения?


person Community    schedule 21.01.2020    source источник


Ответы (1)


попробуйте это в своей деятельности в onCreate setSupportActionBar(toolbar) или setActionBar(toolbar)

person knapweed1    schedule 10.03.2020