[안드로이드] Multi Screen 적용 방안 (DPI & DIP)
Muiti Screen을 논하기 전에 가장 먼저 알아야 할 사항은 DPI(Density per inch) & DIP(Density Independant Pixel) 입니다.
DPI 는 device의 해상도에 따른 분류로 아래와 같습니다.
ldpi : 120 dpi 로 QVGA(240 * 320) 에서 사용됨
mdpi : 160 dpi로 HVGA(320 * 480) 에서 사용되며 기본 screen 사이즈로 1 dip = 1px 임
hdpi : 240 dpi로 WVGA(800 * 480), FWVGA (854 * 480) 에서 사용됨
nodpi : dpi 별 리소스 관리시에 위 항목들에 대한 폴더 외에 drawable-nodpi 가 있는 데 이것은 dpi와 관계없는 resource가 들어감
* 참고 : pixel 변환 공식 px = dip * density /160
px는 bit 단위로 화면에 찍는데,
DIP는 안드로이드에서 screen 사이즈에 따른 변화에 대응하기 위한 단위이며, density 의 변화에 따라 크기가 변동하는 단위입니다.
Multi screen을 지원하기 위해서는 dip 단위를 써야 한다는 것입니다.
layout을 위한 XML 파일에 모든 단위를 dip로 해야 하며,
<resources> <dimen name=“dipTest”>10dip</dimen> </resources> |
<표 1> layout xml 파일
해당 값을 코드 상에서 사용할때는 표 2와 같이 dip를 px로 바꿔주는 함수를 써서 적용해야 합니다.
int dipTest = getResources().getDimensionPixelSize(R.dimen.dipTest) |
<표 2> java 파일
이미지 파일들은 base screen 사이즈인 mdpi기준으로 만들면 자동으로 줄거나 늘어나지만, 조금씩 깨지는 것은 막을 수 없습니다.
따라서 이미지 파일들은 각각의 dpi에 맞춰 갖추는게 좋으며, layout 의 경우는
dip를 최대한 활용해 코드를 최소화 하는 게 좋은것 같습니다.