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>
能解決你的問題嗎?