안드로이드 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를 쓰시는 것을 권장합니다.