【问题标题】:Collapsing Toolbar with ViewPager2 gives scrolling issues使用 ViewPager2 折叠工具栏会导致滚动问题
【发布时间】:2020-03-21 13:57:58
【问题描述】:

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

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

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

正如您在第一张图片中看到的那样,它只有在我选择时才能正常工作 工具栏,但每当我抓住空的时候都会出现拖动问题 NestedScrollView 所在的空间。

这是 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>

【问题讨论】:

    标签: java android android-toolbar android-nestedscrollview


    【解决方案1】:

    经过很长时间,我终于通过删除 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,请将其放入片段中,它会按预期运行。

    【讨论】:

    • 请澄清“设置片段”是什么意思?
    • @XZen 在里面添加一些东西(一个片段),否则滚动不起作用。
    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我不能使用正常的,因为添加/删除标签时出现问题
    • 我尝试在我的应用程序中实现 ViewPager2,但由于性能问题最终回到了 ViewPager。我想说 ViewPager2 还没有完全优化。也许最好解决您在原始 ViewPager 中遇到的问题并坚持使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多