Android/Kotlin
[Android, Kotlin] dp, sp 단위에 대해 알아보자.
겨울시인
2022. 4. 28. 16:55
크기 단위에 대해 알아보자.
- 레이아웃이나, 각종 View 또는 텍스트의 크기를 지정할때, 내가 직접 입력한 값으로 설정(hard coding)할 수 있는데
- 그때 입력 숫자값 뒤에 붙은 단위로 dp, sp 를 쓴다.
우선 Density 의 dpi 를 이해하자.
- dpi = dots per inch
- 화면 상의 일정 물리적 영역안의 픽셀 수를 말한다.
- 해상도(화면의 총 픽셀 수)가 높다? -> Density(밀도)가 높다 -> dpi 크다
- 반대로 해상도(화면의 총 픽셀 수)가 낮다? -> Density(밀도)가 낮다 -> dpi 작다
dp 가 뭐야?
- dp = Density-independent Pixels
- 첫번째, 화면의 물리적 밀도(Density)에 근거한 추상적 단위
- 두번째, 레이아웃 크기 또는 위치를 표현하기 위해 UI 레이아웃을 정의할 때 사용해야 하는 가상 픽셀 단위
1 dp = 160 dpi 화면에서의 1개의 물리적 픽셀과 같다. (기준)
- dp 단위를 화면 픽셀로 변환식하는 식은 다음과 같다
px = dp * (dpi / 160)- (예를 들어 240dpi 화면에서 1dp는 1.5개의 물리적 픽셀)
왜 Density-independent Pixels (밀도에 독립적인 픽셀) 단위를 쓸까?
- 단순히 시중에 나와있는 기기(device)들을 떠올려봐도 이해하기 쉽다.
- 엄청나게 다양한 기기들은 각각의 화면 크기, 해상도 Density를 가진다.
- 만약 App 을 만들어 배포했는데 어떤 특정 스펙에만 맞추어진 버전으로 내놓겠는가를 생각해보자. No!!
- 즉, 절대값이 아닌 추상적/가상 단위로 크기를 설정하여 Density가 다른 화면에서 UI가 적절하게 표시되도록 하려면 App의 UI를 정의할 때 항상 dp 단위를 사용해야 한다.
- 결과적으로 dp 단위를 사용함으로써 각각 기기(device)의 다른 Density, 화면 크기와 상관없이
내가 원하는 크기를 UI를 그대로 보여줄 수 있게되는 것이다.
이미지 출처 : Understanding Density Independence Pixel: sp, dp, dip and all in android
sp 가 뭐야?
- sp : scalable pixels
dp 단위와 비슷하지만 주로 UI의 텍스트, 폰트 사이즈에 주로 쓰이는 단위로 알려져있다.