본문 바로가기
프로그래밍/안드로이드

안드로이드 크기 단위(dp, sp, pt, px, mm, in)

by pentode 2018. 4. 20.

안드로이드 위젯의 크기를 지정할 때 사용되는 단위에 대해서 알아보겠습니다. 결론부터 말하자면 위젯의 크기는 "wrap_content", "match_parent" 또는 dp 단위를 사용하는것이 좋습니다. 텍스트의 크기는 sp 단위를 사용하는것이 권고 됩니다.


본론으로 들어가기전에 몇가지 용어에 대해서 알아보겠습니다.


- 화면크기 : 화면의 실제 물리적 크기이미, 화면의 대각성 크기로 측정됩니다. 단순화하기 위해 Android에서는모든 실제 화면 크기를 네 가지 일반화된 크기 그룹으로 분류합니다


 + 초대형 화면 : 최소 960dp x 720dp

 + 대형 화면 : 최소 640dp x 480dp

 + 보통 화면 : 최소 470dp x 320dp

 + 소형 화면 : 최소 426dp x 320dp


- 화면 밀도 : 물리적 화면 공간 안에 있는 픽셀의 개수이며, 일반적으로 dpi(dots per inch:인치당 도트수)라고 부릅니다. 단순화하기 위해 Android에서는 모든 실제 화면 밀도를 여섯 가지 일반화된 밀도 그룹으로 분류합니다.


 + ldpi (저밀도) ~120dpi

 + mdpi (중간 밀도) ~160dpi

 + hdpi (고밀도) ~240dpi

 + xhdpi (초고밀도) ~320dpi

 + xxhdpi (초초고밀도) ~480dpi

 + xxxhdpi (초초초고밀도) ~640dpi


- 해상도 : 화면에 있는 물리적 픽셀의 총 개수입니다. 예로 이천만화소 등으로 부릅니다.



사용되어지는 단위를 보겠습니다.


- in : 인치(inch) 기반의 물리적 스크린 크기 입니다.

- mm : 밀리미터(millimeters) 기반의 물리적 스크린 크기 입니다.

- px : 스크린상의 실제 픽셀에 대응하는 단위입니다. 픽셀 단위로 크기를 정하게 되면 화면 밀도가 큰 스크린에서는 작게 보여지게 됩니다.


- dp : 밀도 독립적 픽셀(Density-independent Pixels)

UI 레이아웃을 정의할 때 레이아웃 치수나 위치를 밀도 독립적 방식으로 표현하기 위해 사용해야 하는 가상 픽셀 단위 입니다.


밀도 독립적 픽셀이란 160dpi 화면의 물리적 픽셀 하나를 말하며, 이것은 시스템에서 "보통" 밀도 화면에 해당하는 기준 밀도입니다. 사용 중인 화면의 실제 밀도에 따라, 시스템이 런타임에 dp 단위의 모든 확대/축소를 투명하게(transparent) 처리합니다. dp단위를 화면 픽셀로 변환하는 것은 간단합니다.


px = dp * (dpi / 160)


layout_width="100dp"인 뷰는 중간 밀도 화면에서 100 픽셀 너비로 측정되고 고밀도 화면에서는 시스템이 이것을 최대 150 픽셀로 확대하므로, 이 뷰는 화면에서 물리적으로 거의 동일한 공간을 차지합니다.


다른 밀도의 화면에 UI 가 적절히 표시되도록 하려면, 애플리케이션 UI를 사용할 때 항상  dp 단위를 사용해야 합니다.


-sp : 텍스트 크기를 정의하는 경우 sp(배율 독립적 픽셀 : Scale-independent Pixels)를 사용해야 합니다. sp 배율은 사용자 설정에 따라 다르며, 시스템은 dp의 경우와 동일하게 크기를 확대/축소합니다.


- pt : 화면 밀도와 상관 없이 1pt는 물리적 화면 크기의 1/72인치 입니다. 즉, 모든 기기에서 72pt는 1인치가 됩니다. dp와의 차이점은 dp는 화면 밀도에 따라서 항상 160dp가 1인치가 되지는 않는다는 것입니다.


안드로이드 기기는 많은 업체에서 제작되고 화면의 크기 및 해상도 천차만별입니다. 이런 서로다른 크기화 화면밀도, 해상도를 가진 기기들에서 같은 모양의 UI를 제공하기 위해서는 dp 를 사용해야 합니다.

반응형