'안드로이드 dp'에 해당되는 글 2건

안녕하세요. 제임스 입니다. 


Android 개발 중에 DP, SP, PX 등의 치수 단위를 많이 보게 됩니다. 

일전에 개념 정리한 내용이 있으니 참조 하시면 좋을 것 같구요.

http://jamesdreaming.tistory.com/41


이번에는 이 단위 변환 방법에 대해 정리해 보겠습니다. 



■ DP 를 PX 로 변환

import android.util.DisplayMetrics;
import android.util.TypedValue;
public static int convertDpToPixels(float dp, Context context) {
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
return px;
}



■ SP 를 PX 로 변환

public static int convertSpToPixels(float sp, Context context) {
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
return px;
}



■ DP 를 SP 로 변환???

public static int convertDpToSp(float dp, Context context) {
int sp = (int) (convertDpToPixels(dp, context) / (float) convertSpToPixels(dp, context));
return sp;
}

코드를 위와 같이 작성 하긴 했지만 실제로 사용할 일이 없습니다. 


sp 는 텍스트 사이즈를 정의 할때 사용하고 dp 는 그 이외 모든 사이즈를 정의할때 사용합니다. 

만약 텍스트 사이즈를 dp 로 정의 했다면 문제가 될 수도 있겠지만 sp 로 정의 했다면 특별히 문제가 될 것은 없을 것이며 변환식 자체가 의미 없습니다. 



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,

안녕하세요. 제임스 입니다. 


이번에는 안드로이드 DP 및 DPI 의 개념에 대해 정리 하겠습니다. 


■ Dimension Units (치수, 크기 단위) 

안드로이드 에서 유저 인터페이스를 xml 에서 생성하거나 또는 java 코드로 생성 할 수 있습니다. 이때 크기, 거리, 길이, 넓이, 높이, 마진, 패딩 등등을 표현하기 위해 여러가지 치수, 크기 단위를 사용할 수 있습니다. 


아래는 안드로이드에서 사용하는 기본 단위들입니다. 


px - 화면상의 실제 픽셀입니다. 단일 픽셀의 물리적 크기는 화면 밀도에 따라 달라집니다. 


in - 화면의 물리적 인치 단위 입니다. 단일 인치의 픽셀 수는 화면 밀도에 따라 달라지게 되는데 이는 픽셀수가 화면 밀도에 따라 달라지기 때문입니다. 


mm - in 과 마찬가지로 화면의 물리적 밀리미터 단위 입니다. 1 inch 는 25.4 mm 입니다. 


pt - Point 로 불리며 텍스트의 폰트 사이즈를 의미 합니다. 1 inch 는 72 pt 입니다. 


dp - 단일 dp 의 물리적 사이즈는 모든 화면 밀도에서 거의 동일 합니다. 1 inch 는 거의 160 dp 입니다. 


sp - 비율 독립 픽셀단위로 특별히 텍스트 크기를 위해 사용합니다. 단일 sp 의 물리적 사이즈는 모든 화면 밀도에서 겅의 동일 합니다. 1 inch 는 거의 160 sp 입니다. 


< 이미지 출처 : https://www.captechconsulting.com/blogs/understanding-density-independence-in-android >



■ DPI (Dots Per Inch) 란? 

안드로이드 리소스에서 사이즈 구분을 mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi 등으로 하고 있습니다. 

여기서 dpi 라는 단위에 대해 설명 드리겠습니다. 

DPI (Dots per Inch) 즉, 인치당 들어가는 픽셀을 의미합니다. 


mdpi ---> 48 px

hdpi ---> 72 px

xhdpi ---> 96 px

xxhdpi ---> 144 px

xxxhdpi ---> 192 px 


이 됩니다. 


DPI <---> Pixel 간 변환은 아래 사이트에서 하실 수 있습니다. 

https://pixplicity.com/dp-px-converter/

아래 이미지와 같은 사이트로 DPI 와 PX 사이의 값 뿐만 아니라 다른 단위에 대한 값들도 자동 산정되니 개발 시 참조 하세요.



http://www.gargasz.info/android/

아래 사이트에서도 상기 사이트와 같이 converter 를 제공하고 있으며 dimension uint 에 관한 설명도 같이 보실 수 있습니다. 



■ Density (밀도) & DPI

밀도는 DPI 를 일정 단위로 나눈 것입니다. 

여석 가지 일반화된 밀도는 아래와 같습니다. 


~ 120dpi > ldpi (저밀도) 

~ 160dpi > mdpi (중간 밀도) - baseline

~ 240dpi > hdpi (고밀도) 

~ 320dpi > xhdpi (초고밀도)

~ 480dpi > xxhdpi (초초고밀도)

~ 640dpi > xxxhdpi (초초초고밀도)


MDPI 의 경우 1 sp = 1 px = 1dp 가 되어 기준점이 됩니다. 

이후 HDPI, XHDPI .... 로 올라 갈 수록 sp 대비 dp 비율이 증가 하게 되는 내용을 정리 한 이미지 입니다. 




위 이미지는 안드로이드에서 실제 크기와 밀도가 일반화된 크기와 밀도로 대략적으로 맵핑되는 방식을 보여주고 있습니다. 



다른 화면 크기에 맞게 UI 작업을 하다보면 각 디자인에 최소한의 공간 크기가 필요 합니다. 따라서 위 이미지에서 나타난 각 일반화된 화면 크기는 시스템이 정의하는 최소 해상도를 가지게 됩니다. 이 최소 크기의 단위는 dp 이며 이 경우 시스템이 화면 밀도의 변화를 걱정할 필요가 없습니다. 



현재 사용중인 단말의 DPI 는 아래와 같은 코드를 이용하여 구할 수 있습니다. 

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int deviceDpi = metrics.densityDpi;

deviceDpi 값이 바로 사용중인 단말의 DPI 값입니다. 




이번에는 안드로이드에서 사용하는 기본적인 치수 단위들과 DP 및 DPI 에 대해 정리 했습니다. 

도움이 되었으면 하는 바램과 함께... 저는 이만 잠자리로 :)


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,