«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

[위미르 개발팀] Android, iOS , Web 제작

[안드로이드 레이아웃] ViewPager 높이 wrap_content로 설정하기 본문

개발자료/Android

[안드로이드 레이아웃] ViewPager 높이 wrap_content로 설정하기

위미르개발팀 2017. 12. 26. 13:10

ViewPager의 아이템에 이미지 하나를 보여주는 경우가 있는데,  이럴경우 뷰페이저의 높이를 고정으로 설정했을때 기종별로 실제로 가지는 높이가 다르게 나타날수있고, 이미지의 사이즈에 따라서 유동적으로 변해야 합니다.


그래서 ImageView를 adjustBoundView = true 로 설정해도 뷰페이져가 고정된 높이를 가지게 되면 빈공간이 보이게 될것입니다.


그래서 뷰페이져의 높이를 wrap_content로 설정을 해도 안드로이드 기본 뷰페이져는 wrap_content적용시 match_parent와 똑같이 나타난다는 문제가 있습니다.


이를 해결하기 위해서는 ViewPager를 상속받은 클래스를 만들어서 onMeasure를 오버라이딩 해주어야 합니다.

package com.wimir.example


public class MeasuredViewPager extends ViewPager {


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

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

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int mode = MeasureSpec.getMode(heightMeasureSpec);
if (mode == MeasureSpec.UNSPECIFIED || mode == MeasureSpec.AT_MOST) {
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.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

}

클래스명은 임의로 하시고 onMeasure를 위와같이 오버라이딩 한후


xml에서 


<com.wimir.example.MeasuredViewPager

   android:layout_width:"match_parent"

   android:layout_height:"wrap_content"/>


와 같은 식으로 사용하면 됩니다.





희 위미르에서는 모바일 어플리케이션(Android/iOS), Web 개발을 해드리고 있습니다.


문의 전화 : 070-4177-3962




Comments