dp를 왜 쓸까에 대한 고민이 문득 든 것인 단톡방에서
"dp 대신에 cm를 쓰면 더 직관적이지 않느냐?"
라는 물음에서 시작되었습니다.
생각을 해보니 맞는 말이기도 하여 이 기회에 제 생각을 이렇게 글로 작성합니다.
DP는 Device-independent Pixel 또는 Density-independent Pixel 의 약자입니다. 말 그대로 장치에 독립적인 픽셀. 즉 모바일 기기에 맞는 새로운 기준인 것이지요.
DP는 장치에 독립적인 픽셀이기에 기존 단위로 측정할 수 있는 단위를 갖습니다.
Android 에서는 1dp = 1/160 inch, 또는 0.15875mm
저는 여기서 의문이 생겼습니다. 어찌보면 기존의 inch, mm의 단위체계를 이용해서 가져다 쓰면 되는건데 굳이 새로운 단위체계인 DP를 만드는게 과연 옳은것인가. 새로운 체계이기 때문에 한번 더 변환해야하는 문제가 생기는 것아닐까 라는 것이죠.
실제로 1cm의 버튼을 만들어야한다고 가정했을때 불편해집니다. 근데 만약 dp 대신 cm, mm을 썼으면 간단하게 다음과 같이 표현하겠죠
android:textSize="10mm"
근데 지금 dp 체계에는 애매합니다.
android:textSize="6dp" 또는 "7dp"
하지만 여기서 생각해본다면 Inch를 쓰는 곳에서 10mm 라는 단위는 어떻게 보면 6dp 또는 7dp 처럼 애매하긴 똑같습니다.
그래서 여기서 제 뇌피셜로는
각 나라마다 기준이 다르니 차라리 우리(구글,안드로이드)가 기준(DP) 를 만들고 써보자
이렇게 되면 새로운 기준으로 모두 통합시킬 수 있고 다양한 해상도를 지원하는 모바일생태계에 적용가능한 단위가 되는 것이죠.
제가 찾아본 바로는 DP를 만든 이유에 대해 설명하는 글은 없었습니다. 하지만 이미 DP는 모바일, 적어도 안드로이드에서는 표준인 단위가 되었습니다.
Low density (120dpi) : ldpi
Medium density (160dpi) : mdpi
High density (240dpi) : hdpi
Extra High density (320dpi) : xdpi
Extra Extra High density (480dpi) : xxdpi
Extra Extra Extra High density (640dpi) : xxxdpi
안드로이드 상에서 dpi와 dp를 구하는 방법
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int dpi = outMetrics.densityDpi;
float density = outMetrics.density;
'개발 > 안드로이드' 카테고리의 다른 글
[안드로이드] FCM 클릭시 이벤트 처리하기 (3) | 2020.05.27 |
---|---|
[안드로이드] dialog 안에서 startActivity사용하기 (0) | 2020.05.25 |
[안드로이드] 원하는 좌표를 구글맵 화면에 표시해보자(LatLngBounds) (0) | 2020.05.16 |
[안드로이드] 네이버 길찾기 api 파싱해서 구글맵 폴리라인 찍기 (1) | 2020.05.11 |
[안드로이드] timepickerdialog spinner 모드로 변경하는 법 (0) | 2020.03.23 |
댓글