[Android] dp, px, dpi 단위 정리
📚dp, px, dpi 개념
개발을 하면서 항상 설정하게 되는 단위인 dp, 솔직히 어떤 개념인지 자세히 알지 못해 항상 다음에 알아봐야지 해놓고는 알아보지 않았다. 미루고 미루던 중 오늘은 꼭 이를 정리하고자 한다.
안드로이드는 다양한 기기에서 실행되며, 각각의 기기의 화면 크기와 밀도는 다양하다. 예컨대 한 기기에서는 제곱인치 당 160픽셀로 구성되어 있는 반면, 다른 기기에서는 같은 공간을 480픽셀로 구성한다. 이러한 차이를 고려하지 않는다면, 이미지가 완전히 잘못된 크기로 나타날 수 있다.
📔px와 ppi
픽셀은 화면을 구성하는 가장 기본이 되는 단위이다. 사각형으로 이루어져 해상도를 나타낸다. 픽셀의 수가 많을수록 고해상도의 이미지라고 할 수 있다. px 단위는 화면의 전체 크기와 상관없이 지정한 수치만큼 표시되는 절대적 표시 단위이므로 안드로이드에서는 px보다 dp 단위를 사용하면 좋다. 이유는 위에서 설명했던 것과 같이 픽셀은 물리적인(고정적인) 크기를 나타낼 수 없기 때문이다. 픽셀의 크기는 ppi(pixel per inch, 1인치 당 몇 개의 픽셀로 이루어져 있는지 나타내는 밀도 단위)를 어떻게 지정했는지에 따라 달라지기 때문이다.
출처 https://blank2.tistory.com/3
📔dpi
dpi(dot per inch)는 1인치에 들어가는 점을 나타내는 단위이다. ppi와 마찬가지로 개수가 많을수록 고밀도이다. 안드로이드에서의 주요 dpi는 다음과 같다.
dpi | 설명 |
---|---|
ldpi |
120dpi |
mdpi |
160dpi (기본) |
hdpi |
240dpi |
xhdpi |
320dpi |
xxhdpi |
480dpi |
xxxhdpi |
640dpi |
안드로이드의 기준 dpi인 160dpi의 경우, 밀도 독립 단위인 dp와 px가 같은 크기를 가진다. 즉, 160dpi에서는 1dp는 1px이 된다.
출처 https://itwiki.kr/w/DPI
📔dp
dp는 픽셀 독립 단위이다. ppi가 다른 디바이스에서 px로 표기한 밀도가 클수록 작게 보인다. 이를 위해 dp를 사용한다. dp는 픽셀과 상관없이 어떤 기기에서도 같은 비율을 유지하기 때문이다.
📖dp의 사용
- 같은 애플리케이션에 Low, Medium, High-density 화면에 px단위로 크기를 지정
- 같은 애플리케이션에 Low, Medium, High-density 화면에 dp단위로 크기를 지정
📖dp와 px의 단위 변환
코드 작성 시에는 dp를 사용할 수 없기 때문에 px로 바꾸어 주어야 한다.
- px = dp * (dpi(단말) / 160(기본))
- dp = px * (160 / dpi)
📝마무리
앞으로의 해당 단위들을 사용 시에는 다시 한번 이 내용들을 유념하며 사용해야겠다. 아무래도 알고 쓰는 게 더 효율적이기 때문이다.