[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
1. 키보드 감추기
EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

2. 키보드 보여주기
EditText editText = (EditText) findViewById(R.id.myEdit);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);

위 코드로 안보이는 경우 아래코드도 시도해보세요
- imm.showSoftInputFromInputMethod (editText .getApplicationWindowToken(),InputMethodManager.SHOW_FORCED);

onCreate등에서 제대로 동작하지 않는다면
Handler로 post를 해서 위 코드를 실행시켜보세요.

3. 키보드 토글 - 위 두가지 방법으로 안되는 경우 다음과 같은 코드로 동작하는 경우가 있습니다.
imm.toggleSoftInputFromWindow(editText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);

4. 액티비티 시작시 자동으로 키보드 보여주기
AndroidManifest.xml의 activity 태그의 속성에 android:windowSoftInputMode="stateVisible" 혹은 "stateAlwaysVisible"삽입

5. 액티비티 시작시 자동으로 키보드 보여주지 않기
AndroidManifest.xml의 activity 태그의 속성에 android:windowSoftInputMode="stateHidden" 혹은 "stateAlwaysHidden" 삽입

6. 에디트 텍스트 선택해도 키보드 안뜨게 하기
EditText xml 속성에서 inputType 을 0으로 주면 안뜹니다.

 

'Android' 카테고리의 다른 글

[Android]다국어 지원시 TIP  (0) 2012.08.21
[Android] DPI 구하기!  (0) 2012.07.19
[Android]안드로이드 라이프 사이클  (0) 2012.06.21
[Android]APIDemo 순서입니다.  (0) 2012.05.31
[Android]D-day 계산기 만들어보기.  (0) 2012.05.29

 

 

 

1. onResume()/onPause()
onPause() 함수는 Activity 위에 다른 Activity 가 올라오거나 하여 focus 를 잃었을 때 불린다.
onResume() 함수는 focus 를 다시 얻었을 때 불린다.
예를 들어 폰의 alarm 이 울리거나 전화가 오는 경우 onPause() 함수가 불린다.

2. onStart()/onStop()
onStop() 함수는 Activity 가 완전히 화면을 벗어날 때 불린다. 예를 들어 홈키를 눌러 홈화면으로 이동하거나 전화가 와서 화면을 완전히 덮는 경우 불린다.
onStart() 함수는 Activity 다시 화면이 다시 돌아 올 때 불린다.

3. 선택 방법
만약 자신의 Activity 위에 다른 Activity 가 올라왔는데 화면을 전부 채우지 않았을 때 작업을 계속 하고 싶다면 onStart()/onStop() 함수에 작업 시작/종료 를 구현하면 되겠고 Activity 가 focus 를 잃으면 무조건 작업을 종료해야 하는 경우 onResume()/onPause() 함수에 작업 시작/종료를 구현하면 되겠다.

'Android' 카테고리의 다른 글

[Android] DPI 구하기!  (0) 2012.07.19
[Android] 키보드 숨기기/보이기  (0) 2012.07.19
[Android]APIDemo 순서입니다.  (0) 2012.05.31
[Android]D-day 계산기 만들어보기.  (0) 2012.05.29
[Android]키보드 입력 종류  (0) 2012.05.29