안드로이드 작업 기기(폰, 태블릿) 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를 기준으로 환산하는 지를 알아 낼 수 있다.
'IT, Programming > Android' 카테고리의 다른 글
안드로이드 Asset file 사용하기 (모두 읽어오기) (0) | 2014.08.29 |
---|---|
안드로이드 InputStream을 ByteArray로 바꾸기 (InputStream to ByteArray) (0) | 2014.08.28 |
안드로이드 스테이터스 바(status bar) 높이 구하기 (1) | 2014.08.28 |
안드로이드 전체 charset 목록 정보 확인하기 (0) | 2014.08.27 |
안드로이드 ANT build 환경 구축하기 (0) | 2014.08.26 |