【发布时间】:2020-01-21 19:18:44
【问题描述】:
我正在尝试在 Activity 中使用共享 chrome(工具栏等)制作单 Activity 应用。
我想使用 Google 的组件(CoordinatorLayout 和 AppBarLayout)来利用工具栏的自动隐藏功能,该功能会在内容滚动时隐藏/显示。这对于应用程序的“主页”目的地至关重要,该应用程序在每个页面上都有一个带有可滚动内容的视图寻呼机。
我已将NavHostFragment 的layout_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