【问题标题】:CoordinatorLayout as top-level decor when NavHostFragment contains non-scrolling views当 NavHostFragment 包含非滚动视图时,CoordinatorLayout 作为顶级装饰
【发布时间】:2020-01-21 19:18:44
【问题描述】:

我正在尝试在 Activity 中使用共享 chrome(工具栏等)制作单 Activity 应用。

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

我已将NavHostFragmentlayout_behavior 设置为建议的滚动行为,但是当非滚动片段占用NavHostFragment 时,这不起作用。在这种情况下,片段的内容会被下推(切掉底部),以便为 Activity 布局中的工具栏腾出空间。

活动布局:

<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 并将其仅添加到具有滚动内容的目的地。它会限制我可以在目的地之间使用的动画,但这似乎是目前最好的选择。

有什么想法吗?

【问题讨论】:

    标签: android android-coordinatorlayout


    【解决方案1】:

    在 onCreate 中的 Activity 上试一试 setSupportActionBar(toolbar) 或者 setActionBar(toolbar)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2023-04-07
      • 1970-01-01
      • 2017-06-04
      • 2012-12-01
      相关资源
      最近更新 更多