2012-11-16 219 views
13

我試圖把ViewPager與不同高度的不同片段。我知道wrap_content不適用於ViewPager,因此我試圖設置dinamically的傳呼機高度。 我設置的尋呼機高度在頁面聽衆:動態設置ViewPager高度

... 
     indicator.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int selected) { 
       final View view = fragments[selected].getView(); 
       if (view != null) { 
        pager.setLayoutParams(new LayoutParams(
          LayoutParams.MATCH_PARENT, view 
            .getMeasuredHeight())); 

       } 

      } 

遺憾的是它不工作,因爲getMeasuredHeight()Fragment返回的值是錯誤的。我究竟做錯了什麼?

回答

16

這是我的解決方案:

ViewTreeObserver viewTreeObserver = mViewPager.getViewTreeObserver(); 
    viewTreeObserver 
      .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

       @Override 
       public void onGlobalLayout() { 

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
          LinearLayout.LayoutParams.WRAP_CONTENT, 
          LinearLayout.LayoutParams.WRAP_CONTENT); 

        int viewPagerWidth = mViewPager.getWidth(); 
        float viewPagerHeight = (float) (viewPagerWidth * FEATURED_IMAGE_RATIO); 

        layoutParams.width = viewPagerWidth; 
        layoutParams.height = (int) viewPagerHeight; 

        mViewPager.setLayoutParams(layoutParams); 
        mViewPager.getViewTreeObserver() 
          .removeGlobalOnLayoutListener(this); 
       } 
      }); 

我把它的onResume();

+0

但OnGlobalLayoutListener未被調用。爲什麼? –

+0

你確定嗎?你記錄了它並確定它不是? – czaku

+4

什麼是FEATURED_IMAGE_RATIO?我試圖在fragmentpageradapter上使用它 –

1

嘗試設置其參數在onLayout()的viewpager的

+0

那麼你建議擴展viewPager?問題是,尋呼機應該有顯示片段的高度,所以我不明白如何在onLayout()中解決這個問題。 – Matroska