본문 바로가기
Programming 개발은 구글로/JAVA[Android]

[안드로이드] 화면 해상도 dp에 대하여

by 40대직장인 2022. 4. 6.

Android 화면 해상도 단위

 

dp, px, dpi, cm

  • dp: 안드로이드에서 사용하는 가상의 단위로 같은 dp가 단말의 해상도나 화면 크기에 상관없이 같은 물리적 길이를 가진다.
  • px: 물리적 해상도를 표시하는 단위 픽셀(Pixel)이다. 개발자뿐 아니라 컴퓨터 사용자에게 가장 친숙한 단위다. 아이폰을 비롯한 다양한 모바일 기기들이 px 단위를 사용해 GUI를 개발했다.
  • dpi(Dot Per Inch) : 1인치당 도트의 개수다. 밀도(density)를 잴 때 쓴다. 숫자가 크면 밀도가 높고, 고화질로 보인다.
  • cm(Centimeters) : 모두다 아는 물리적인 길이를 재는 단위다.

 

단말의 SW(Small width)를 구하면, 1440px / (640 dpi / 160 dpi) = 360dp이다.

단말 sw의 px / ( 단말의 dpi / 160(mdpi의 dpi) ) = 단말 sw의 dp

그러면, dp는 왜 사용하는가?

다양한 해상도와 다양한 크기의 단말을 지원하기 위해, 새로운 단말이 나올 때마다 테스트하고 새로 앱을 만들어야

한다면 매우 번거로울 것이다.

 

이를 해결하기 위해, 애플은 Device의 해상도를 거의 바꾸지 않는다. 안드로이드는 이를 dp를 통해 해결하고 있다.

같은 dp를 가진 앱 내 이미지나 글자는 단말의 해상도나 화면 크기에 관계없이 사용자 입장에서 (거의) 같은 물리적 크기로 보이도록 안드로이드 시스템이 자동으로 처리해준다.

 

이미지를 예로 들면, 먼저 개발자가 미리 다양한 크기의 같은 이미지를 포함하여 앱을 만든다. 그 후 사용자 단말의 밀도가 높아질수록 더 큰 이미지를 이용해 화면에 표시하고, 반대로 밀도가 작아질수록 더 작은 이미지를 사용해 화면에 표시한다.

mdpi는 4의 배수다?

mdpi는 4의 배수를 사용하는 것이 좋기 때문이다. hdpi는 mdpi 대비 1.5배, ldp는 0.75배이다.

만약 mdpi가 4의 배수가 아니라면, hdpi와 mdpi는 소수점 자리를 갖게 되고, 물리적 기기 제작이 어려워진다.

 

예를 들면,

  • mdpi가 160이라면, hdpi = 240, ldp=120
  • mdpi가 163이라면, hdpi = 244.50, ldp = 122.25

small width가 중요한 이유는?

우리가 사용하는 단말은 세로로 길고, 위-아래 방향으로 스크롤하면서 콘텐츠를 확인하기 때문이다.

사용자가 가로 스크롤은 불편하기 때문에 보통 콘텐츠의 가로는 100%로 고정하고 제작하기 때문이다.

dpi 값이 단말 실측한 값과 다른 경우가 있다면?

이론은 간단하지만, 단말을 제작하는 현실은 녹록하지 않다.

실제 단말을 제작하는 과정에서 액정의 물리적인 특성으로 인해 인치 당 픽셀 개수가 예상한 것보다 1 픽셀 모자라거나 더 들어갈 수도 있다.

그럼, xxxhdpi 단말의 dpi가 639나 641이 될 수도 있는 것이다. 이런 문제를 제어하기 위해 dpi 값은 제조사에서 시스템의 프로퍼티에 가장 적당한 값을 정해서 넣는다.

단말의 dpi를 제조사에서 어떻게 설정했는지는 아래와 같은 adb shell을 통해 확인할 수 있다.

 

 > adb shell getprop ro.sf.lcd_density
640

위에서 언급한 것처럼 639나 641을 정도를 보정하기 위해 640으로 입력하기도 한다.

하지만 가끔 실제 단말 측정 시에는 600 dpi 정도인데, 640으로 입력하는 것처럼 무슨 생각으로 이렇게 했는지 싶을 정도로 단말의 물리적 조건과 dpi 값이 오차가 있는 경우도 있다.

 

안드로이드에서 가이드하는 밀도 단위는 왜 xxxhdpi까지 있을까?

일반적으로 사람이 도트로 인한 계단 현상을 느끼는 정도가 300 ppi라고 한다.

현재 출시된 xxxhdpi 단말은 대부분 300 ppi를 넘는다.

물론 예민한 사람들은 더 높은 밀도를 가진 단말을 원할 수도 있겠지만, 화면의 크기가 커지거나 혹은 밀도가

높아질수록 cpu 파워나 배터리 사용량, 또한 가격이 상승하므로 해상도 경쟁이 저 정도에서 잦아들었기 때문일 것이다.

 

또 다른 필요에 의해 더 높은 밀도를 가진 단말이 출시된다면 xxxxhdpi 같은 또 다른 가이드가 추가될지도 모르겠다.

 

하지만, 간혹 560 dpi처럼 애매한 값을 가지는 단말도 있다.

이 때는, 자기보다 하위 리소스 폴더인 xxhdpi를 참조하지 않고, 상위인 xxxhdpi를 참조한다.

 

 

댓글