【Android】ViewPager2切换fragment时高度无法自适应问题


前言

在这里插入图片描述
tab选项、底部或者顶部的导航栏、菜单栏 点击时都需要去切换fragment页面,可以有以下实现方式:

  1. 可以使用FrameLayout控件手动切换(不可滑动,滑动需单独实现)
  2. 使用viewpage2自动切换(可以滑动)

一、问题

ViewPage2是Jetpack中的其中一个组件,可以实现滑动切换页面的效果,通常可以搭配其他组件实现滑动切换效果。ViewPager2是基于RecyclerView实现的,自然继承了RecyclerView的众多优点,并且针对ViewPager存在的问题做了优化。可以使用offscreenPageLimi属性来预先加载页面,也可设置为0实现懒加载(页面显示时再加载)。
在这里插入图片描述

但是在实际开发中遇到一个问题:

ViewPager2下多个fragment的页面高度可能是不同的,在允许预加载的条件下ViewPager2的高度会始终跟随最高的那个fragment的高度,导致其他比较低的fragment页面出现留白的问题。即便禁止了预加载,也不能解决。

二、解决

1. ViewPage2添加配置

如果要实现ViewPage2的高度始终和当前的fragment保持一致,那么就需要在每一次点击tab的时候重新计算当前fragment的高度并将高度设置给ViewPage2。

vp2_frag是ViewPage2控件,fragmentList是所有fragment的集合

			private val fragmentList = arrayListOf<Fragment>()
			
			......
			
			//viewPager初始化以及切换tab的时候都会触发这个监听,不管是否禁止了预加载都不会有影响
            vp2_frag.viewTreeObserver.addOnGlobalLayoutListener {
   
   
                if
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

full courage

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值