ViewPager2へのMigrationでNested scrollが効かない

ViewPager2にMigrateした際、NestedScrollが効かなくなっていたためその対応。

MigrationについてのDocumentは以下。

Migrate from ViewPager to ViewPager2  |  Android Developers

よく見てみると Support nested scrollable elements という章があり、本来VIewPager2では同方向のNested scrollはサポートされていないことがわかる。

https://developer.android.com/training/animation/vp2-migration?hl=en#nested-scrollables

今回はDocumentにLinkされていた NestedScrollableHost を使うことで解決した。

こちらのNestedScrollableHostをプロジェクト内に定義し、Nested scrollしたいViewPagerをwrapすることで可能となる。

github.com

layout fileは以下。Indicatorも一緒にwrapすることできちんと動くことが確認できた。 自分のプロジェクト内で試した場合は親のview groupの違いによって動く動かないがあったので試したほうがよいと思う。

<com.your.project.NestedScrollableHost
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <androidx.viewpager.widget.ViewPager
                android:id="@+id/view_pager"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="top"
                android:layout_marginBottom="16dp" />

            <com.viewpagerindicator.CirclePageIndicator
                android:id="@+id/page_I"
                style="@style/BaseCircleIndicator.White"
                android:layout_width="match_parent"
                android:layout_gravity="bottom|center_horizontal"
                android:paddingTop="8dp" />
</com.quipper.school.assignment.ui.NestedScrollableHost>