본문 바로가기
프로그래밍/Android

dp/dip/sp/px 단위와 멀티해상도

by Daniel.kwak 2018. 12. 7.

안드로이드는 다양항 스마트폰의 해상도를 지원하므로 개발할 때 멀티해상도를 신경써야 한다.


스크린의 실제 단위 PX 

P는 화면을 구성하는 최소 단위이다. PX는 화면의 전체 화면 크기와 상관없이 지정한 수치만큼 표시되는 절대적 표시 단위이므로 안드로이드에서는 PX보다는 DP단위를 써야한다. 


DPI

Dot Per Inch의 줄인말로, 1인치에 들어가는 픽셀을 나타내는 단위이다. 안드로이드의 기본 단위는 mdpi : 160dpi 이다. 잠깐 살펴보자

  • ldpi : 120dpi
  • mdpi : 160dpi(기본) 픽셀과 dp의 대응이 1:1이다. 즉 1dp는 1px가 된다.
  • hdpi : 240dpi
  • xhdpi : 320dpi
  • xxhdpi : 480dpi
  • xxxhdpi : 640dpi

다양한 디바이스 크기에 대응하기 위해 필요한 DP
DP는 픽셀 독립 단위이다.
화면의 크기가 달라도 동일한 비율로 보여주기 때문에, 안드로이드에서 정의한 단위이며 큰 화면, 작은 화면에 상관없이 같은 크기로 나타난다.


이 예시는 같은 px크기의 뷰를 Low Density , Medium Density , High Density 단위로 나타낸것이다. 고밀도로 갈수록 픽셀의 개수가 많아지므로 뷰의 크기가 자연스럽게 작아짐을 알 수 있다.



이 예시는 모두 같은 DP를 가지는 뷰이다. 밀도가 달라져도 똑같은 비율로 화면에 보여짐을 알 수 있다. 

이 예시를 통해 왜 안드로이드에서 DP 단위를 써야하는지 알 수 있다.



위 개념들을 실무에 적용해보자.
실제로 디자이너는 디자인 결과물을 해상도별로(mdpi , hdpi , xhdpi ...) 파일을 보내줘야 하고, 개발자도 해상도별로 파일을 관리해야 한다.

DP와 PX 단위의 변환

px = dp * 단말 DPI/기본 160
dp = px * 기본160/ 단말 DPI

따라서 mdpi인 경우 160/160 이므로 1dp 는 1px이 된다. xxhdpi인 경우 5dp를 pixel로 계산하면 5dp * 480/160 이므로 15pixel이 된다.