2 답변
-
px (pixel) 그리고 dpi
디바이스의 스크린에 들어가는 실제 픽셀 (이미지의 파랑 점 1개). 이전의 모든 디바이스(지금의 일반 모니터들) 해상도는 mdpi(160dip)여서 1dp = 1px였으나, 레티나 디스클레이나 그 이상급 해상도들이 나오면서 1px의 크기가 l/m/h/x dip에서 의미하는 값이 달라졌습니다. dpi란 1 인치(inch)당 pixel의 수를 의미합니다.
dp 와 dip (Density Independent Pixel)
px만으로는 해상도에 따라 크기가 달라지기 때문에, 안드로이드 폰의 다양한 해상도를 지원하기 위해 만든 단위입니다. 큰 화면이든 작은 화면이든 실제 눈으로보기에 같은 크기로 보이도록 합니다. 즉, 해상도가 낮은폰에서 1cm정도되는 길이를 높은 해상도의 폰에서도 1cm짜리로 보이도록 되어있습니다. px에서 dp로 변환하는 것은 px/dp 계산기를 참고하세요.
dpi구하는 방법과, java에서 dp를 px직접 바꾸는 방법들은 참고해두세요.
/* 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()); }
sp(Scale-independent Pixel)
dp와 비슷하지만 추가적으로 사용자가 선택한 글꼴 크기에 의해 크기가 자동으로 조절됩니다. 이 단위는 글꼴 크기를 지정하는 데 사용되도록 권장합니다. 다른 단위를 sp단위로 바꿔야할 경우에는 안드로이드 픽셀계산기를 사용하세요.
요약하자면, 레아이웃 등의 UI적 요소는 dp(dip)을 사용하는 것이 좋고, 글자 크기에는 sp를 사용하는 것이 좋습니다. px이나 pt는 사용하지 마세요.
-
px는 픽셀이고 sp는 크기에 독립된 픽셀이고 dip랑 dp는 같은 뜻인데 밀도에 독립된 픽셀이라는 뜻입니다.
보통 sp는 폰트사이즈에 사용하고 dip는 아무데나 다 사용 가능합니다. dip는 멀티 디바이스환경을 지원해주기 떄문에 픽셀대신에 dip 나 dp를 쓰시는 것을 권장합니다.
댓글 입력