Resolution and DP (Density Independent Pixels)
1.안드로이드의 주요 단위
용어 및 단위 | 설명 |
---|---|
Pixel | 화면상의 픽셀 |
Resolution | 픽셀 단위의 화면 크기. 예를 들어, 갤럭시노트 10.1의 해상도는 1280*800인데, 이는 픽셀이 1280개 및 800개임을 의미한다. |
DPI (Dots Per Inch : 밀도) | 물리적인 1 인치 당 포함되는 픽셀 개수. 예를 들어, 160 DPI는 1인당 픽셀이 160개 포함된다는 것을 의미한다.
mdpi에서 1DPI = 1PX |
DIP (Density Independent Pixels) 또는 DP | 밀도 독립 단위로, 장치의 밀도에 상관없이 물리적으로 (거의) 동일한 크기를 갖는다. |
스크린 크기 | 물리적인 크기의 종류를 나타낸다. 다음의 4종류가 존재한다
|
SP (Scale Independent Pixels) | 스케일 독립 픽셀 단위로 , dip와 유사하며, 글꼴 크기를 지정할 때 주로 사용된다. |
디바이스별 테스트
갤럭시노트 10.1 | 옵LTE 2 | 넥서스7 | 옵Q | |
---|---|---|---|---|
해상도 (PX 단위) | 800 x 1280 | 720 x 1280 | 800 x 1280 | 480 x 800 |
해상도 (DP 단위) | 800 x 1280 | 360 x 640 | 600 x 961 | 320 x 533 |
DPI | 160 DPI | 320 DPI | 213 DPI | 240 DPI |
스크린 크기 | X-Large | Normal | Large | Normal |
밀도 비율 (DPI / 160) | 1 | 2 | 1.331250 | 1.5 |
- Keypoint
- - 안드로이드의 기준 DPI는 중간 수준인 160 DPI이다.
- - 160 DPI를 기준으로 DPI가 크면 밀도가 높아지고, DPI가 작으면 밀도가 낮아진다.
- - 또한, 160 DPI인 경우 밀도독립 단위인 DP(DIP)와 픽셀이 같은 크기를 갖는다.
- - 즉, 160 DPI에서 1 DP는 1 PX이 된다.
2.DIP (Density Independent Pixels) 또는 DP
DP 단위는 독립적인 크기를 나타낼 수 있도록 하는 단위이다. 이론상 어떠한 해상도에서도 같은 크기를 보여주는 것이 핵심 개념이다.
표준이 되는 화면크기를 중심으로 보다 큰 화면에서는 지정된 배율로 크기를 늘려주고, 작은 화면에서는 지정된 배율로 크기를 줄여준다.
- DP 계산법
- px = dp + (dpi / 160)
* dp 와 dip (Density Independent Pixel)
말 그대로 실제 픽셀에 독립적인 단위로 안드로이드 폰의 다양한 해상도를 지원하기 위해 만든 단위이다. 큰 화면이든 작은 화면이든 같은 크기로 나타나게 되어있다. (그러나 적용해보면 미세하게 다르다..) 즉, 화면이 작은 폰에서 10원짜리 만하게 나타난다면 화면이 큰 폰에서도 10원짜리 만하게 나타나도록 되어있다. dp(dip)와 px간의 변환을 하는 방법은 아래와 같다.
dp(dip)와 px간의 변환
px = dp * (160 / dpi) = dp * density
dp = px / (160 / dpi) = px / density
여기서 density는 density = dpi / 160 계산 한다.
ldpi : density = 0.75
mdpi : density = 1
hdpi : density = 1.5
xdpi : density = 2
※ dpi와 density 구하는 방법 |
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int dpi = outMetrics.densityDpi;
float density = outMetrics.density;
※ java코드에서 dp를 px로 바꾸는 방법
java코드에서 density또는 dpi를 이용해서 dp를 px로 변환할 수도 있지만 TypedValue를 이용해서 다음과 같이 구할 수 있다.
public int dpToPixel(int dp){
int px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DP, context.getResources().getDisplayMetrics());
}