2017-12-29 25 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

감사하지만 내 문제를 해결할 수 없습니다. 전체 코드를 도와주세요. –