생활
안드로이드 dp 단위에 대해서
안드로이드에서 dp? dip? 라는 단위를 사용하는거 같은데
구체적으로 px와 어떤관계인가요?
1개의 답변이 있어요!
dp의 목적은 "다양한 화면 크기에서 동일한 비율로 출력되도록 하는 픽셀 단위"입니다.
쉽게 설명된 건지 모르겠습니다만 길이의 단위인 inch와 cm 관계로 보면 비슷할 것 같습니다.
안드로이드 layout 중에 기종별로 ldpi, mdpi, hdpi... 등등 여러 종류가 있지요?
* dpi (Dot Per Inch)
1인치당(2.54Cm) Pixel의 수로 1인치에 들어가는 픽셀을 나타나는 단위입니다.
- ldpi => 120dpi (1인치에 120픽셀)
- mdpi => 160dpi (1인치에 160픽셀)
- hdpi => 240dpi (1인치에 240픽셀)
- xhdpi => 320dpi (1인치에 320픽셀)
- xxhdpi => 480dpi (1인치에 480픽셀)
- xxxhdpi => 640dpi (1인치에 640픽셀)
* dp/dip (Density Independent Pixel)
픽셀 독립적인 단위로 픽셀과 상관없이 안드로이드 디바이스의 다양한 화면을 위해 정의된 단위 입니다.
이 단위를 사용하면 크기가 큰단말이나 작은 단말에서도 같은 사이즈의 오브젝트를 보여줄 수 있습니다.
(하지만, dp개념이 모든 해상도 문제에 대한 완전한 해답은 아닙니다.)
* dp와 Pixel의 상호 변환
dp와 Pixel간의 관계를 사용하여 상호 변환할 수 있습니다.
px = dp * dpi/160 = dp * density
dp = dp * 160/dpi = px/density
density = dpi/160
dpi는 단말에 정해져 있는 값이며 예를들어 mdpi 지원 단말일 경우 위에서 dpi가 160 이므로 1dp * 160/160 = 1pixel이 됩니다.
또한 xxhdpi 지원 단말에서 3dp를 pixel로 계산할 경우 3dp * 480/160 = 9 pixel 이므로 xxhdpi 단말의 3dp는 9pixel이 됩니다.
참고로 보통 sp는 폰트사이즈에 사용하고 dip는 아무데나 다 사용 가능합니다. dip는 멀티 디바이스환경을 지원해주기 떄문에 픽셀 대신에 dip 나 dp를 쓰시는 것을 권장합니다.