IT, Programming/Android

안드로이드 작업 기기(폰, 태블릿) DPI 알아내기

우주먼지 [宇宙塵, cosmic dust] 2014. 8. 27. 22:29

안드로이드 작업 기기(폰, 태블릿) DPI 알아내기

안드로이드로 개발을 하다보면 단말기기-여기서는 보통 스마트폰이나 태블릿이 되겠지-의 density DPI(dots per inch)를 알아야 하는 경우가 발생한다.

 

폰 스펙 설명 페이지에 위의 density DPI가 정확하게 나와 있는 경우도 있으나 우리가 원하는 그 density DPI가 아니라 실제 물리적인 DPI-(실제 pixel / 물리적 inch 길이)- 를 기재해 놓은경우가 대부분이다. 그럼 보통 '246.5 dpi'니 '440.25 dpi'니 하는 뭔가 딱 떨어지지 않는 float스러운더러운 수치로 나오겠지. 졸라 float 같은 새끼.

 

그러나 우리가 필요로 하는 DPI는 그 물리적 실제 DPI가 아니라 OS에서 해당 device의 DPI를 몇으로 인식하고 있느냐를 알아야 한다.

 

Android OS에서는 기기를 몇 가지 특정한 DPI 수치로 인식 한다. 그 수치들은 다음과 같다.

  

 
DENSITY_LOW
 
120
 좀 있음
 
DENSITY_MEDIUM
 
160
 좀 있음
 DENSITY_TV  213  거의 안 씀
 
DENSITY_HIGH
 
240
 많음
 
DENSITY_XHIGH
 
320
 많음
 DENSITY_400  
400
 잘 못봄
 
DENSITY_XXHIGH
 
480
 많음
 
DENSITY_XXXHIGH
 
640
 있나?

 

여기서 자주 쓰이는 수치들은 파란색으로 칠해 놓았다. 봐라 얼마나 아름다운 수치들인가. 120, 160, 240, 320, 480. 120에 4를 곱하면 480이 되고 그걸 반으로 나누면 240이요, 3으로 나누면 160이고, 또 160을 두 배하면 320이 되고 막 저놈이 이놈되고 이놈이 저놈 되고 막 아오 막 환상.

 

Android OS에서는 말했다시피 위에 적인 정형화된 몇몇의 DPI로 device를 인식하기때문에, OS에서 해당 device의 DPI를 몇으로 인식하고 있느냐를 알아야 한다. 그래야 dp(density pixel = dip, density independent pixel)단위로 수치를 주었을때 몇 px로 환산 될지를 정확하게 계산 할 수 있기때문에 UI를 오차 없이 제대로 먹일 수 있는 것이다.

 

그렇다면 이 수치를 어떻게 알아내느냐는....다음과 같다. 

DisplayMetrics metrics = new DisplayMetrics();
WindowManager mgr = (WindowManager)sContext.getSystemService(Context.WINDOW_SERVICE);
mgr.getDefaultDisplay().getMetrics(metrics);

Log.d("TAG", "densityDPI = " + metrics.densityDpi);

 

위과 같이 하면 OS에서 dp를 px로 바꿀 때에 어떤 dpi를 기준으로 환산하는 지를 알아 낼 수 있다.