CoordinatorLayout в качестве декора верхнего уровня, когда NavHostFragment содержит не прокручивающиеся представления - PullRequest
0 голосов
/ 21 января 2020

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

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

Я установил NavHostFragment s 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 как общего chrome и добавление его только в места назначения с прокручиваемым контентом. Было бы ограничено, какую анимацию я могу использовать между пунктами назначения, но на данный момент это лучший вариант.

Есть мысли?

1 Ответ

1 голос
/ 10 марта 2020

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

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