pixel, ppi, dpi
- pixel (picture element, 화소): 화면을 구성하는 가장 기본이 되는 단위
- ppi (pixel per inch, 1인치당 픽셀의 수): 디스플레이 장치에서의 해상도
- dpi (dots per inch, 1인치당 점의 수): 출력물(인쇄) 상에서의 해상도
- ppi와 dpi는 픽셀이냐 점이냐의 차이지, 해상도를 나타내는 단위로서 결국 같은 맥락이다.
- ppi나 dpi가 높아질수록 선명도가 좋아지지만, 용량이 커진다.
그런데, px 단위로 크기를 설정하면 아래 사진처럼 화면 밀도가 클수록 이미지가 더 작아지는 문제가 발생한다. 이를 해결하기 위한 것이 dp 단위이다.
cf) 화면 밀도 구분
- ldpi (저밀도) ~120dpi
- mdpi (중간 밀도) ~160dpi
- hdpi (고밀도) ~240dpi
- xhdpi (초고밀도) ~320dpi
- xxhdpi (초초고밀도) ~480dpi
- xxxhdpi (초초초고밀도) ~640dpi
dp vs sp
dp (Density-independent Pixels, 밀도 독립적 픽셀)
dp는 화면 밀도와 독립적으로 동일한 크기의 뷰를 제공하기 위해 사용하는 가상 픽셀 단위이다.
dp를 px 단위로 변환해야 할 때는 아래 식을 사용하면 된다.
px = dp * (dpi / 160)
결국, 밀도 독립적인 픽셀 단위(dp)에 해상도(dpi)를 다시 고려해주면, 화면 밀도를 반영한 픽셀 단위(px)를 다시 구할 수 있게 된다.
sp (Scale-Independent Pixels, 배율 독립적 픽셀)
sp는 텍스트 크기를 지정하기 위해 사용하는 단위로서, dp와 달리 시스템 설정에 따라 크기가 유동적으로 변한다.
sp는 주로 TextView의 textSize를 지정할 때 사용된다. dp는 화면에 따라 크기가 달라지지 않고 고정된 값을 갖지만, sp는 시스템의 설정에 따라 textSize가 크거나 작아진다. (단, 텍스트 크기가 고정되어야 할 때는 dp를 사용하면 된다.)
결론
- 레이아웃 크기: wrap_content, match_parent, 또는 dp 단위를 사용하자.
- 텍스트 크기: 시스템 설정에 따라 크기가 달라지는 sp 단위를 사용하자.
- 필요에 따라 레이아웃은 dp 대신 px을 사용할 수도 있고, 텍스트는 sp 대신 dp를 사용할 수도 있다.
참고 자료