반응형

 

 

1. dpi (Dot Per Inch)

1인치당 픽셀 수. 물리적 단위인 1 inch (=2.54cm)에 몇 픽셀이 들어가는가를 나타내는 단위다. 

 

Low density (120dpi) : ldpi

Medium density (160dpi) : mdpi

High density (240dpi) : hdpi

Extra High density (320dpi) : xdpi

 

 

 

2. px

스크린의 실제 픽셀 단위를 사용하며, 실제 크기나 밀도와 상관이 없다. mdpi(160dip)에서 1dp = 1px 이다. 따라서

 

ldpi : 1dp = 0.75px

mdpi : 1dp = 1px

hdpi : 1dp = 1.5px

xdpi : 1dp = 2px;

 

 

 

3. 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());
}

 

 

4. sp

dp와 비슷하지만 사용자가 선택한 글꼴 크기에 의해 크기가 조절된다.

 

 

5. SP(Scale-Independent Pixels) vs DP(Density-Independent Pixels)

 

-SP(Scale-Independent Pixels) :  직역하면 스케일 독립 픽셀 단위로, 시스템이 지정한 font size에 영향을 받음.

-DP(Density-Independent Pixels) : 직역하면 밀도 독립 픽셀 단위로, 장치의 밀도에 상관없이 물리적으로 동일한 크기를 갖음.

 

SP는 글자 크기가 시스템에 따라 유연하게 변하지만 DP는 시스템에 영향을 받지 않고 늘 고정적인 크기를 가지는 것입니다.

 

요약

 

- 레아이웃 등의 UI적 요소는 dp(dip) 사용을 권장.

(dp를 쓴다고 모두 해결되는 것은 아님)

- 글자 크기에는 sp를 사용을 권장.

- 되도록이면px는 지양(상대적이지 못하고 절대적)

 

 

 


https://voyun.tistory.com/5
https://ccdev.tistory.com/9?category=554484

반응형

'Basic > Android' 카테고리의 다른 글

Easing functions 공식 및 그림  (0) 2019.12.12
다각형 영역으로 이미지 자르기  (0) 2019.11.19
Android View의 상대 좌표  (0) 2019.11.17
Android title bar 제거하는 간단한 코드  (0) 2019.11.13
Android exception 모음  (0) 2019.11.07