美文网首页Android开发经验谈
Android经验谈:当ViewPager遇见ScrollVie

Android经验谈:当ViewPager遇见ScrollVie

作者: mudcastles | 来源:发表于2018-12-13 17:56 被阅读13次

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

    能解决你的问题吗?

    相关文章

      网友评论

        本文标题:Android经验谈:当ViewPager遇见ScrollVie

        本文链接:https://www.haomeiwen.com/subject/jzpbhqtx.html