ViewPager2+Tablayout+Fragment高度异常问题_tablayout高度异常
ViewPager2嵌套Fragment时候,本想ViewPager2的高度设定为:wrap_content自适应Fragment高度。结果是ViewPager2的高度异常,页面短的Fragment下面留有很大空白。网上有很多重写ViewPager的方法去自适应高度,这是个办法。但我就想用ViewPager2,可ViewPager2没有办法被自定义,于是stackoverflow…
解决问题:
inner class PageChangeCallback : ViewPager2.OnPageChangeCallback() {
//重写ViewPager2.OnPageChangeCallback()中的onPageSelected
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
//这个view是的fragment。
val view = (viewPager[0] as RecyclerView).layoutManager?.findViewByPosition(position)
view?.let {
updatePagerHeightForChild(view, binding.viewPager)
}
}
}
//解决viewpager2高度问题
private fun updatePagerHeightForChild(view: View, pager: ViewPager2) {
view.post {
val wMeasureSpec =
View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.EXACTLY)
val hMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
view.measure(wMeasureSpec, hMeasureSpec)
if (pager.layoutParams.height != view.measuredHeight) {
pager.layoutParams = (pager.layoutParams)
.also { lp ->
lp.height = view.measuredHeight
}
}
}
}
参考:https://stackoverflow.com/questions/58492796/viewpager2-with-differing-item-heights-and-wrap-content/58632613#58632613