1. 程式人生 > >ScrollView巢狀ViewPager空白,上下或者左右不能滑動問題

ScrollView巢狀ViewPager空白,上下或者左右不能滑動問題

最近做專案,一個詳情頁涉及到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) {

        int 
height = 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); }