ScrollView巢狀ViewPager空白,上下或者左右不能滑動問題
阿新 • • 發佈:2019-02-04
最近做專案,一個詳情頁涉及到ScrollView中帶viewPager,滑動並且切換fragment.做好介面之後發現,
沒有我寫好的fragment的佈局,開始就找fragment的問題,關於設定adapter的時候,fragment中用
getChildFragmentManager,activity中用getSupportFragmentManager這個問題就不細說了,自己這塊沒毛病,方向有誤,
就回去看佈局,發現viewpager在佈局中其實是沒有顯示的,應該是因為ScrollView得不到viewpager的高度,所以就顯示
不出來了,就開始往這方面解決,查資料說,重寫ScrollView的,試了,沒用,然後看到說
1、設定ScrollView的fillViewPort為true
2、設定ViewPager的layout_height為一個固定高度
第一種呢,你設定後發現,viewpager是顯示了,但是不能上下滑動了,這個fillViewPort的屬性,就是充滿這個佈局,設定了,你
就發現ScrollView成死的了.
第二種我沒試,因為fragment裡面是有listview的,不可能設死,所以棄用.
最後的解決方案就是還是用ScrollView不重寫它,去重寫viewpager,設定它的高度.邏輯很簡單,順利解決!
佈局中的viewpager,直接用MyViewPager就OK了!
public class MyViewPager extends ViewPager { public MyViewPager(Context context) { super(context); } public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { intheight = 0; for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if (h > height) height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }