프로그래밍[Univ]/Android

[Android] get or set wrap content height

Cloud Travel 2014. 11. 14. 14:27

Android에서 wrap_content로 만든 뷰의 높이를 설정하거나 뷰의 높이를 얻어오는 소스코드이다.

기존에 소개했던 코드에서 약간의 변경 사항이 있다.


뷰에서 Margin값이 사용되었다면 Margin값만큼 기준이 되는 Width값을 줄여야 한다.

이를 반영한 코드가 아래의 코드이다.


아래의 코드는 높이 값을 가져오는작업을 한다.


private int getHeightForWrapContent(Activity activity, View view) {
	DisplayMetrics metrics = new DisplayMetrics();
	activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

	ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
	int rightMargin = params.rightMargin;
	int leftMargin = params.leftMargin;
	
	int screenWidth = metrics.widthPixels - (rightMargin + leftMargin);

	int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
	int widthMeasureSpec = MeasureSpec.makeMeasureSpec(screenWidth, MeasureSpec.EXACTLY);

	view.measure(widthMeasureSpec, heightMeasureSpec);

	return view.getMeasuredHeight();
}


아래의 코드는 높이 값을 세팅하는 작업을 한다.


private void setHeightForWrapContent(Activity activity, View view) {
    DisplayMetrics metrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

    ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
	int rightMargin = params.rightMargin;
	int leftMargin = params.leftMargin;
	
	int screenWidth = metrics.widthPixels - (rightMargin + leftMargin);

    int heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
    int widthMeasureSpec = MeasureSpec.makeMeasureSpec(screenWidth, MeasureSpec.EXACTLY);

    view.measure(widthMeasureSpec, heightMeasureSpec);
    int height = view.getMeasuredHeight();
    view.getLayoutParams().height = height;
}