스크린의 실제 단위 PX

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

DPI

DPI는 Dots Per Inch로 1인치에 들어가는 픽셀을 나타내는 단위이다.
예를 들어 100DPI는 1인치당 픽셀이 100개가 포함된다는 것을 의미한다.
개수가 많을수록 고밀도이며 안드로이드에서 주요 DPI는 아래와 같다.

  • ldpi : 120dpi
  • mdpi : 160dpi(기본)
  • hdpi : 240dpi
  • xhdpi : 320dpi
  • xxhdpi : 480dpi
  • xxxhdpi : 640dpi

안드로이드의 기준 DPI는 160DPI이다.
160 DPI인 경우 밀도 독립단위 DP와 PX이 같은 크기를 갖는다.
즉, 160DPI에서는 1dp는 1px이 된다.

DP(Density-Independent Pixels)는 UI 레이아웃을 정의할 때 레이아웃 치수나 위치를 지정하기 위해 사용하는 단위이다. 픽셀 독립 단위이며 화면의 크기가 달라도 동일한 비율로 보여주기 위해 안드로이드에서 정의한 단위이며 큰 화면, 작은 화면에 상관없이 같은 크기로 나타난다.

SP(Scale-Independent Pixels)는 UI 레이아웃을 정의할 때 텍스트의 크기를 지정하기 위해 사용하는 단위이다.

안드로이드 설정 화면에서 사용자는 안드로이스 시스템 전체에서 보여지는 텍스트의 크기를 선택하여 설정할 수 있는데 SP는 해당 설정에 영향을 받는다. 예를 들어, 시스템 설정에서 텍스트 크기를
"최대 크케"로 설정하게 되면 UI 레이아웃을 정의할 때 SP로 크기를 지정해놓은 TextView의 텍스트 크기가 영향을 받아 커진다. 반면에 TextView의 텍스트 크기를 DP로 설정하게 되면 시스템 설정의 텍스트 크기 값의 변화에 상관없이 일정한 크기를 유지한다.

그래서 디자인 명세에 따라서는 텍스트 크기의 값의 단위를 SP를 사용하는 것이 아니라 DP를 사용하는 것이 좋을 경우도 있을 것이다. 다시 말해, 언제나 일관성 있게 화면에서 똑같은 텍스트 크기를 표현하고자 하는 경우에는 SP가 아닌 DP 단위를 사용하도록 한다.

참고