[Android] DPI 구하기! Android 2012. 7. 19. 15:05

안드로이드의 걸림돌....UI 작업입니다. ㅠㅠ

각 기종마다 다른 DPI 에 따라 작업을 해야하는 경우가 생깁니다. 참고하세요

 

dpi( dots per inch) = > 1인치에 들어 있는 픽셀의 수. 안드로이드에서는 160을 기본으로 한다.

코드상에서 구하는법 => context.getResources().getDisplayMetrics().densityDpi


디바이스 독립 픽셀

dp = pixel / (dpi=density / 160)


안드로이드기반 디바이스들의 dp가 같으면 dp 단위로 레이아웃을 작성하면 된다.

하지만 다른 폼팩터일 경우에는 레이아웃을 새로 만드는편이 낫다?


아래는 현재 나와있는 스마트폰을 정리해 봄


[HVGA 스마트폰]

- RESOLUTION : 320px(320dp) * 480px(480dp)

- DENSITY DPI : 160 dpi

- SCREEN SIZE : normal


예 : G1, 옵티머스원


[WVGA 스마트폰]

- RESOLUTION : 480px(320dp) * 800px(533dp) or 854px(569dp)

- DENSITY DPI : 240 dpi

- SCREEN SIZE : normal


예 : 넥서스원, 갤럭시S, 갤럭시S2 , XPERIA X10


[7인치 태블릿]

- RESOLUTION : 600px(600dp) * 1024px(1024dp)

- DENSITY DPI : 160 dpi

- SCREEN SIZE : large


예 : 킨들 파이어


[10인치 태블릿]

- RESOLUTION : 800px(800dp) or 720px(720dp) * 1280px(1280dp)

- DENSITY DPI : 160 dpi

- SCREEN SIZE : xlarge


예 : 갤럭시탭 10.1, 모토로라 XOOM


[갤럭시노트]

- RESOLUTION : 800px(400dp) * 1280px(640dp)

- DENSITY DPI : xhdpi, 320 dpi


[7인치 갤럭시탭]

- RESOLUTION : 600px(400dp) * 1024px(682dp)

- DENSITY DPI : hdpi, 240 dpi

- SCREEN SIZE : large(Gingerbread)


안드로이드를 기반으로한 폼팩터가 스크린을 기준으로 4개로 나뉜다는 것을 볼수있다.

1. 320dp 스마트폰

2. 400dp 태블릿폰

3. 600dp 7인치 태블릿

4. 720dp(800dp) 10인치 태블릿.


따라서 다중디스플레이를 지원하려면 총 4개의 폼팩터 별로 레이아웃을 작성하는것이 좋을것 같다.


추가(2012.03.05)

안드로이드 3.2 이상에서는 dp로 레이아웃 지정이 가능하다.


1. dp 너비(width dp): 현재 어플리케이션 레이아웃을 위해 사용할 수 있는 "dp" 너비 입니다. 화면의 가로 세로 모드에 따라 변경됩니다 (사용법: layout-w400dp)

2. dp 높이(height dp): 현재 어플리케이션 레이아웃이 사용할 수 있는 "dp" 높이 입니다. 화면의 가로 세로 모드에 따라 변경됩니다. (사용법: layout-h800dp)

3. 최소 dp 너비(smallest width dp): 어플리케이션 레이아웃이 사용가능한 최소 너비 입니다. 화면 회전과 상관없이 단말의 가로 세로 중에 작은 "dp"에 따라 변경됨. (일반적으로 디바이스가 세로 모드일 때의 dp 너비 , 사용법: layout-sw800dp)

예1)

res/layout/main_activity.xml # For handsets (smaller than 600dp available width)

res/layout-sw600dp/main_activity.xml # For 7” tablets (600dp wide and bigger)

res/layout-sw720dp/main_activity.xml # For 10” tablets (720dp wide and bigger)

예2)

res/layout/main_activity.xml # For handsets (smaller than 600dp available width)

res/layout-w600dp/main_activity.xml # Multi-pane (any screen with 600dp available width or more)

'Android' 카테고리의 다른 글

[Android]strings.xml 사용시 팁  (0) 2012.08.24
[Android]다국어 지원시 TIP  (0) 2012.08.21
[Android] 키보드 숨기기/보이기  (0) 2012.07.19
[Android]안드로이드 라이프 사이클  (0) 2012.06.21
[Android]APIDemo 순서입니다.  (0) 2012.05.31