如何将 Android ViewPager2 的高度包装到当前项目的高度?

ban*_*ing 14 android android-fragments android-viewpager android-viewpager2

这个问题是针对新的ViewPager2类的。

旧的 ViewPager有一个类似的问题,但解决方案需要扩展ViewPager。但是,ViewPager2 是最终版本,因此无法扩展。

在我的情况下,我有一个包含三个不同片段的 ViewPager2。其中一个片段比其他两个片段高得多,这意味着当您滑动到较短的片段之一时,会有很多空白空间。那么如何有效地将 ViewPager2 包裹到当前片段的高度呢?

Luc*_*ile 9

解决方案是在属于 的每个片段中添加以下内容ViewPager2

override fun onResume() {
   super.onResume()
   binding.root.requestLayout()
}
Run Code Online (Sandbox Code Playgroud)

binding.root从ViewBinding /数据绑定,但它是你的布局,即主容器ConstraintLayoutLinearLayout等等。


Kim*_*ble 7

我对这个解决方法一点也不满意,但它确实解决了我在尝试使用具有不同高度片段的 ViewPager2 时遇到的渲染问题。它显然会减慢渲染速度并消耗更多内存。

myStupidViewPager2.offscreenPageLimit = fragments.size
Run Code Online (Sandbox Code Playgroud)

  • 好主意,但不适用于延迟加载的项目(例如分页) (2认同)

小智 0

对我来说,设置 viewpager2 的 recyclerview 布局参数可以解决这个问题。

尝试

<androidx.viewpager2.widget.ViewPager2
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

并设置 recyclerview 布局参数

RecyclerView recyclerView = (RecyclerView) viewPager.getChildAt(0);
recyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
Run Code Online (Sandbox Code Playgroud)