[Android] 안드로이드 다중화면 지원
1. 시작하는 글
Android는 다양한 기기에 실행되며 화면 크기와 밀도가 다양
2. 용어와 개념
화면크기 : 실제 물리적 크기
화면 밀도 : 물리적 화면 공간에 있는 픽셀 개수(dp), 일반적으로 dpi(dots per inch)라 부름
ex) 같은 물리적 공간 안 픽셀 수 : 고밀도 > 중밀도 > 저밀도
Android는 6가지 밀도그룹으로 분류 - 저밀도, 중간밀도, 고밀도, 초고밀도, 초초고밀도, 초초초고밀도
방향: 사용자 시점에서 바라본 화면 방향. 가로모드 혹은 세로 모드
해상도 : 화면에 있는 물리적 픽셀의 총개수
밀도 독립적 픽셀(dp, density-independant pixel)
: UI레이아웃을 정의할 때 레이아웃 치수나 위치를 독립적 방식으로 표현하기 위한 가상 픽셀 단위
px = dp * (dpi / 160)
ex) 240 dpi화면에서 1dp는 1.5 물리적 픽셀과 같음
# 다른 밀도의 화면에 UI가 적절히 표시되려면 애플리케이션 UI를 정의할 때 항상 dp 단위를 사용해야 함
크기 독립적 픽셀 (sp, scalable-independent pixel)
안드로이드에서 글자크기를 지정할 때 많이씀, dp와 비슷한 크기지만, 선택한 글꼴 크기에 따라 글자 크기가 커짐
3. 지원되는 화면 범위
Android 1.6(API레벨 4)부터 다중 화면 크기와 밀도 지원
6가지 일반화된 밀도
- ldpi(저밀도) : ~120dpi
- mdpi(중간 밀도) : ~160dpi
- hdpi(고밀도) : ~240dpi
- xhdpi(초고밀도) : ~320dpi
- xxhdpi(초초고밀도) : ~480dpi
- xxxhdpi(초초초고밀도) : ~640dpi
4. 요약
UI레이아웃 등 화면에서는 dp사용 (px 사용은 지양함)
글자크기는 sp 사용
예를 들어 mdpi에서 만든 ui가 xdpi 같이 큰 해상도로 늘어났을 때,
px을 사용하여 object의 사이즈를 지정하면 왼쪽처럼 되지만, dp를 사용하면 오른쪽처럼 개발,디자이너 의도에 맞게 sizing이 된다.
참고 :
https://developer.android.com/guide/practices/screens_support.html