当NavHostFragment包含不可滚动的视图时,CoordinatorLayout作为顶级装饰使用。

3

我正在尝试制作一个单活动应用程序,其中活动中拥有共享的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>

具有滚动内容的主目的地(每个页面都带有 RecyclerView 的 ViewPager2)按预期工作。工具栏将如预期隐藏/显示。

但是,当我导航到另一个没有滚动内容的目的地时(它只是高度设置为match_parent并且子视图锚定在布局底部和顶部的 ConstraintLayout),内容底部被截断。

在非滚动目的地中添加底部填充不是选项,因为共享的工具栏可以在进入此目的地时展开(因为它可能在先前的目标中已折叠),并随着动画将内容向下推。

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

我不确定该怎么办。一边理解这个问题,一边担心窗口插图真是太烦人了。我考虑放弃将 CoordinatorLayout 作为共享 chrome 并仅将其添加到具有滚动内容的目标中。这会限制我可以在目标之间使用哪些动画,但这似乎是当前最好的选择。

有任何想法吗?

1个回答

1
在onCreate方法中,尝试使用以下语句之一设置您的活动工具栏: setSupportActionBar(toolbar) 或者 setActionBar(toolbar)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接