2017-12-29 32 views
0

このリンクを[https://medium.com/@nikhil4092/how-to-have-a-height-wrapping-viewpager-when-images-have-variable-heights-on-android-60b18e55e72e]としましたが、viewpagerの高さをwrap_contentにすることを試みましたが、うまくいきませんでした。私はstackoverflowに関するいくつかの質問を試みましたが、 wrap_contentを何も示されていないよう高さを与えてViewPagerの高さを作成する方法wrap_content

コード:

public class HeightWrappingViewPager extends ViewPager { 

public HeightWrappingViewPager(Context context) { 
    super(context); 
} 

public HeightWrappingViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int mode = MeasureSpec.getMode(heightMeasureSpec); 
    // Unspecified means that the ViewPager is in a ScrollView WRAP_CONTENT. 
    // At Most means that the ViewPager is not in a ScrollView WRAP_CONTENT. 
    if (mode == MeasureSpec.UNSPECIFIED || mode == MeasureSpec.AT_MOST) { 
     // super has to be called in the beginning so the child views can be initialized. 
     super.onMeasure(widthMeasureSpec, 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 has to be called again so the new specs are treated as exact measurements 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
} 

XML:

<com.project.test.HeightWrappingViewPager 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

答えて

1

私はそれがあなたを助けるのかどうかはわかりません。
私は以下のコードを異なる高さの画像に使用しました。
ほとんどあなたのコードに似ていますが、フィールドのように高さを保存します。

public class MeasuredViewPager extends ViewPager { 

    private int mMaxHeight = 0; 

    public MeasuredViewPager(Context context) { 
     super(context); 
    } 

    public MeasuredViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     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 > mMaxHeight) mMaxHeight = h; 
     } 

if (mMaxHeight != 0) heightMeasureSpec = MeasureSpec.makeMeasureSpec(mMaxHeight, MeasureSpec.EXACTLY); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

}

+0

あなたの注意をありがとう、それは私の問題を解決することができませんでした。あなたは完全なコードで私を助けてください... –

関連する問題