Android经验谈:当ViewPager遇见ScrollView,ViewPager已经害羞的躲了起来。

最近在做项目的时候使用了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>

能解决你的问题吗?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容