[Android] Resource Density and Screen
- 다중 지원 스크린
안드로이드는 다양한 화면의 크기와 pixcel을 제공하는 장치에서 실행된다.
이에 시스템은 다른 화면 구성을 위한 UI설계 최적화의 크기 밀도등에 대한 API를 제공한다.
- Screen
-. Screen size
화면의 대각선으로 측정한 실제 물리적크기
-. Screen density
화면의 물리적인 영역에서 픽셀의 양. 일반적으로 dpi(dots per inch)라 한다.
-. Resolution
화면의 물리적인 pixel읠 총 개수이다.
-. Density-independent pixel (dp)
UI layout을 정의할때 layout의 크기 및 위치를 표현하기 위해 사용해야 하는 단위이다.
기준 밀도는 160 dpi(medium) 이며 이는 1dp가 1px이기 때문이다.
이를 토대로 계산시 화면 pixel 단위의 변환은 pixel = dp*(dpi/160) 이다.
반대로 dp를 계산한다면 dp=pixel/(dpi/160)이 된다.
예를 들어 WVGA의 경우
1dpi에 대한 pixel 값을 구하려면 480*(1/160) 이므로 1dpi는 3 pixel이 된다.
-. Android 4.2 기준 (http://developer.android.com/tools/revisions/platforms.html)
Nexus 7 (7.3", 800 x 1280, Large tvdpi screen) Galaxy Nexus (4.7", 720 x 1280, Normal xhdpi screen) Nexus S (4.0", 480 x 800, Normal hdpi screen) Nexus One (3.7", 480 x 720, Normal hdpi screen) 10.1" WXGA Tablet (1280 x 800, X-Large mdpi screen) 7.0" WSVGA Tablet (1024 x 600, Large mdpi screen) 5.4" FWVGA (480 x 854, Large mdpi screen) 5.1" WVGA (480 x 800, Large mdpi screen) 4.7" WXGA (1280 x 720, Normal xhdpi screen) 4.65" 720p (720 x 1280, Normal xhdpi screen) 4.0" WVGA (480 x 800, Normal hdpi screen) 3.7" WVGA (480 x 800, Normal hdpi screen) 3.7" FWVGA slider (480 x 854, Normal hdpi screen) 3.4" WQVGA (240 x 432, Normal ldpi screen) 3.3" WQVGA (240 x 400, Normal ldpi screen) 3.2" QVGA ADP2 (320 x 480, Normal mdpi screen) 3.2" HVGA slider ADP1 (320 x 480, Normal mdpi screen) 2.7" QVGA slider (240 x 320, Small ldpi screen) 2.7" QVGA (240 x 320, Small ldpi screen) |
- Density
ldpi |
low-density screens ~120dpi |
mdpi |
medium-density screens ~160dpi (일반적으로 baseline이다) |
hdpi |
high-density screens ~240dpi |
xhdpi |
extra high-density sreens ~320dpi |
nodpi |
독립적인 dpi로 device에 일치하고 싶지 않을때 사용한다. |
tvdpi |
mdpi와 hdpi의 사이로 약 213dpi정도이다. tvdpi는 일반적인 dpi로 간주되지 않으며 이름 그대로 tv을 위해 만들어 놓은것으로 일반적인 app에서는 대체로 사용되지 않는다. tvdpi를 사용할 경우 size는 1.33*mdpi로 생각해야한다. 예를 들면 mdpi화면에 대한 100px X100px 이미지의 경우 tvdpi는 133px X 133px로 해야한다. |
xxhdpi |
extra high-density screes 에서 extra가 하나 더 붙은거로 ~480dpi |
- new size qualifiers
android 3.2부터 제공된 것으로 기존에는 device의 size 및 pixel만 알면 사용이 가능하였는데 개발측면에서 더 폭넓게 resource size를 사용하도록 만든 개념으로 이해된다.
android developer 사이트에서 대략적인 설명이 되어있는데 잘이해가 가지 않는다...;;
-. smallestWidth
sw은 smallestWidth로 가로/세로중 좁은쪽을 말한다. 이는 고정화면크기 특성이며 화면의 방향에 따라 변경되진 않는다.
sw320dp-hdpi 와같이 resource를 지정시 사용된다.
예로 320dpi (1280 x 720, Normal xhdpi screen) 를 가진 device가 있다고 하면 320dpi에 1280 x 720이므로
320dpi : 720 px = 160dpi : x 이므로 방정식으로 계산하면 x 값은 360dp
즉, 해당 resource는 sw360dp-xhdpi의 폴더가 적용된다.
여기서 주의할 점은 320dpi는 단말의 정확한 dpi가 아닌 build시 고정된 값으로 된다. 이 값은 [ro.sf.lcd_density]에 정의되어있다.
참조 : http://developer.android.com/guide/practices/screens_support.html
'Developments > Android' 카테고리의 다른 글
[Android/Tip] Interface (0) | 2013.07.13 |
---|---|
[Android/Exception] - java.lang.IllegalStateException (0) | 2013.07.13 |
[Android] Parcel (0) | 2013.07.13 |
[Android/Tip] ListView getView 중복 호출 (0) | 2013.05.06 |
[Android/Tip] - adjustResize in Fullscreen (1) | 2013.04.17 |