2016-09-27 58 views
1

我有一個Viewpager,以3 x 3顯示項目。此Viewpager是其他視圖的佈局的一部分,因此它的高度需要根據頁面中的項目數動態設置。如何添加動態Viewpager高度

基於這個問題,我創建了一個自定義的viewpager重寫onMeasure像這樣:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     try { 
      View child = getChildAt(mCurrentPagePosition); 
      if (child != null) { 
       child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
       int h = child.getMeasuredHeight() * 3; 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     int count = this.getChildCount(); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 

這擴大了Viewpager顯示在一排三個項目是這樣的:

Viewpager showing three rows

我正在尋找一種方法來動態設置高度爲

int h = child.getMeasuredHeight() * 1; 

int h = child.getMeasuredHeight() * 3; 

基於在頁中顯示的項目數,所以我可以動態地收縮的高度。任何指針讚賞。

Viewpager showing two rows

Viewpager showing two rows

回答

1

如何調用與所需尺寸setMeasuredDimension?

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    try { 
     View child = getChildAt(mCurrentPagePosition); 
     if (child != null) { 
      child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
      int h = child.getMeasuredHeight() * 3; 
      heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    int count = this.getChildCount(); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    setMeasuredDimension(widthMeasureSpec, h); 
} 

這是否解決了您的問題?

+0

謝謝,但是這並沒有改變Viewpager的高度。它給了我一些思考的食物,我會繼續探索/ –