[안드로이드] 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를 최대한 활용해 코드를 최소화 하는 게 좋은것 같습니다.