当NavHostFragment包含非滚动视图时,CoordinatorLayout作为顶级装饰

问题描述 投票:0回答:1

我正在尝试制作一个活动中带有共享的Chrome(工具栏等)的单活动应用。

我想使用Google的组件(CoordinatorLayoutAppBarLayout)来利用工具栏的自动隐藏功能,该功能在滚动内容时隐藏/显示。这对于应用程序的“主页”目标至关重要,该应用程序具有在每个页面上具有可滚动内容的视图寻呼机。

我已经将NavHostFragmentlayout_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>

具有滚动内容的首页目的地(每页上带有ViewPager2RecyclerView)按预期工作。工具栏可以按预期隐藏/显示。

但是,当我导航到另一个没有滚动内容的目的地时(只是一个ConstraintLayout,高度设置为match_parent,子视图固定在版式的底部和顶部),该内容被切断了在底部。

不是将底部填充添加到非滚动目标,因为共享工具栏可以在输入此目标时扩展(因为它可能在前一个目标中已折叠),并且在动画播放时将其向下推。

我看到的问题是NavHostFragment位于工具栏的下方,而不是在其后面(由于滚动视图的行为)。

我不确定该怎么办。缠住我的头,同时还担心窗户的插入,这是脖子上的疼痛。我正在考虑仅放弃CoordinatorLayout作为共享镶边,而仅将其添加到具有滚动内容的目标中。这将限制我可以在目标之间使用的动画,但这似乎是目前最好的选择。

有什么想法吗?

android android-coordinatorlayout
1个回答
0
投票

在onCreate的您的Activity上尝试setSupportActionBar(toolbar)要么setActionBar(toolbar)

© www.soinside.com 2019 - 2024. All rights reserved.