[위미르 개발팀] Android, iOS , Web 제작
[안드로이드 레이아웃] ViewPager 높이 wrap_content로 설정하기 본문
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
'개발자료 > Android' 카테고리의 다른 글
[Android]Webview에 로컬 html 파일 로드하기 (0) | 2018.03.28 |
---|---|
[안드로이드 레이아웃] Glide 이미지 원형으로 자르기 (2) | 2018.02.01 |
[안드로이드 레이아웃] 체크박스 직접 체크했는지 여부 받아오기 (0) | 2017.12.15 |
[안드로이드] Glide에서 Bitmap 얻어오기 (0) | 2017.12.05 |
[안드로이드 레이아웃] Visivility의 gone과 invisible의 차이 (0) | 2017.11.16 |