使用 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 完全解决了这些问题。
所以我有这个奇怪的问题,它只发生在我一直试图解决的 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 完全解决了这些问题。