안드로이드

안드로이드 LinearLayout, FrameLayout, RelativeLayout 등에 LayoutParams를 이용해 동적으로 크기 지정하는 방법

알통몬_ 2017. 9. 19. 17:05
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 

이번 포스팅에서는 LinearLayout, FrameLayout, RelativeLayout에

동적으로 width, height, margin 등의 크기를 설정하는 방법에 대해 알아보겠습니다.


FrameLayout을 예로 하겠습니다.

예) 다이얼로그를 만들건데요. mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi 에 같은 크기로 보이게 하고 싶다면?

어떻게 해야할까요?

동적으로 pixel 값을 다르게 지정해주어서 디바이스에서는 같은 크기로 보이게 하면 되겠죠?


저는 함수를 만들어봤습니다.


public FrameLayout.LayoutParams setFrameMargins(FrameLayout linearLayout, Activity context) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) linearLayout.getLayoutParams();
int width = 0;
int height = 0;
DisplayMetrics metrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("device dpi", "=>" + metrics.densityDpi);
if (metrics.densityDpi<=160) { // mdpi
width = 260;
height = 156;
} else if (metrics.densityDpi<=240) { // hdpi
width = 420;
height = 234;
} else if (metrics.densityDpi<=320) { // xhdpi
width = 560;
height = 312;
} else if (metrics.densityDpi<=480) { // xxhdpi
width = 840;
height = 468;
} else if (metrics.densityDpi<=640) { // xxxhdpi
width = 1080;
height = 624;
}
params.width = width;
params.height = height;

return params;
}

사용 법은 아래와 같습니다.

FrameLayout dialogLL = findViewById(R.id.dialogLL);
dialogLL.setLayoutParams(setFrameMargins(dialogLL, activity));


별로 어렵지 않죠?

동적 크기 설정은 같은 크기의 margin을 적용해야 할 경우에도 유용하게 사용할 수 있습니다.

margin의 경우는

public FrameLayout.LayoutParams setFrameMargins(FrameLayout frameLayout, Activity context) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) frameLayout.getLayoutParams();
int margin = 0;
DisplayMetrics metrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d("device dpi", "=>" + metrics.densityDpi);
if (metrics.densityDpi<=160) { // mdpi
margin = 12;
} else if (metrics.densityDpi<=240) { // hdpi
margin = 18;
} else if (metrics.densityDpi<=320) { // xhdpi
margin = 24;
} else if (metrics.densityDpi<=480) { // xxhdpi
margin = 36;
} else if (metrics.densityDpi<=640) { // xxxhdpi
margin = 48;
}
params.setMargins(margin, margin, margin, margin);

return params;
}
FrameLayout dialogLL = findViewById(R.id.dialogLL);
dialogLL.setLayoutParams(setFrameMargins(dialogLL, activity));

요로코롬 사용하시면 됩니다 똑같이 ㅋㅋㅋ

이상입니다.

반응형