最近在做项目的时候使用了TabLayout+ViewPager 的组合来实现Tab页切换的效果。不得不说这个组合对项目开发真的是提供了太大的便利,但有时也会有一些小尴尬。
问题现象还原:我在Viewpager中放入了多个Fragment,当ScrollView的内容很多,多到一个屏幕盛不了的时候(在我的项目中是有一个富文本区域,有时文本多到一页盛不下),下拉ScrollView到最后,发现ViewPager的内容没有显示!!
调试过程:
- 当我把ViewPager的高度写成match_parent或者wrap_content时,ViewPager无法显示。当我把ViewPager写死高度时,Fragment正常显示,但是我需要的是自适应高度。
- 我发现在相同的页面,如果富文本内容不多,Fragment正常显示
- 我打了很多断点,发现一个问题,当初始化了Tablayout和ViewPager但是还未显示ScollView中的富文本时候,Fragment是显示了的,但是当富文本显示之后,Boom~Fragment消失了。
解决方案
自定义一个ViewPager,重写onMeasure方法。
class ScrollViewPager : ViewPager {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
var height = 0
for (i in 0 until childCount) {
val child = getChildAt(i)
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED))
val h = child.measuredHeight
if (h > height) height = h
}
val mHeightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
super.onMeasure(widthMeasureSpec, mHeightMeasureSpec)
}
}
在布局文件中使用:
<com.peng.administrator.exchangeonlineplatform.view.custom.ScrollViewPager
android:id="@+id/viewPager_tuwen_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.peng.administrator.exchangeonlineplatform.view.custom.ScrollViewPager>
能解决你的问题吗?
网友评论