2016-09-27 16 views
1

3×3のアイテムを表示するViewpagerがあります。このViewpagerは他のビューを持つレイアウトの一部なので、ページ内のアイテムの数に基づいて高さを動的に設定する必要があります。動的Viewpagerの高さを追加するには

Viewpager showing three rows

:これは、このような行の三つの項目を表示するようにViewpagerを拡大

@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); 
    } 

:私はそうのようなonMeasureをオーバーライドviewpagerカスタムを作成しているこの質問に基づいて

高さを動的に設定する方法を探しています

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の高さを変更しませんでした。それは思考のために私にいくつかの食糧を与え、私は/ –

関連する問題