使用 ViewPager2 折叠工具栏会出现滚动问题

Collapsing Toolbar with ViewPager2 gives scrolling issues

所以我有这个奇怪的问题,它只发生在我一直试图解决的 ViewPager2 上,但以前从未见过这样的报道。

我正在尝试将 ViewPager2 与 ToolBar 相协调,以使其在用户滚动其中的内容时隐藏。 它在加载带有填充的 RecyclerView 的片段时工作正常,但当回收器为空或根本没有片段时表现怪异。

这里有一些显示问题的 gif(第一个 ViewPager2(错误),第二个 ViewPager(正确))。

As you can see in the first image it works correctly only if I select the toolbar but gives dragging problems whenever I grab the empty space where the NestedScrollView is.

这里是 ViewPager2 的 xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar"
        style="@style/Widget.MaterialComponents.Toolbar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        app:layout_scrollFlags="scroll|enterAlways"/>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.MaterialComponents.TabLayout.Colored" >

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test" />

    </com.google.android.material.tabs.TabLayout>

</com.google.android.material.appbar.AppBarLayout>

<androidx.core.widget.NestedScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.core.widget.NestedScrollView>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

使用 ViewPager 而不是 ViewPager2。因为自定义 viewpager 在它外面的每个滚动中都会产生问题。比如折叠工具栏,切换标签等等

经过很多时间我终于通过删除 NestedScrollView 并将其替换为实际的 ViewPager2 解决了这个问题。请记住始终设置片段,否则工具栏将不会滚动。

这是 ViewPager2:

<androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

编辑:如果您仍然需要使用 NestedScrollView,请将其放入片段中,它将按预期运行。

无法仅添加评论但想重申正确的解决方案是回退到使用 ViewPager 而不是 ViewPager2。

我有一个带有 NavigationDrawer 和扩展操作栏的 activity。 UI 首先展示一个 MasterFragment,它提供了自引用向下钻取。在某些时候,当您单击 master 中具有实际内容的项目时,我会显示另一个片段。单击此片段会显示一个 3 选项卡视图,其中两个选项卡是 WebView。 WebView 中的垂直滚动被严重破坏并且总是无意中将您切换到另一个选项卡。切换回 ViewPager 完全解决了这些问题。