안드로이드 개발을 하다 보면 웹 개발과 달리 px보다 dp를 사용하여 화면을 구성하는 경우가 많을 것이다.
px은 화면을 구성하는 최소단위로, 화면의 전체적인 크기와 관계없이 지정한 수치만큼 표시되는 절대적 표시 단위이다.
하지만, 안드로이드 개발 시 사용자들이 사용하는 모든 디바이스에서 최대한 같은 형태로 유지되게 하기 위해 px의 사용은 가급적 피하는 게 좋다.
위의 설명한 내용처럼, dp는 다양한 디바이스 크기에 대응하기 위한 픽셀 독립 단위이다.
화면의 크기가 달라도 동일한 비율로 보여주기 위해 안드로이드에서 정의한 단위이며 큰 화면, 작은 화면에 상관없이 같은 크기로 나타난다.
개발을 하다 보면 dp를 px로 바꾼다거나, px을 dp / dp를 px로 바꿔야 하는 경우가 생긴다. 아래에 변환 코드를 작성해 두었다. 여러 클래스에서 사용할 수 있으니 가급적이면 util 클래스에 포함시키는 게 편하다.
//px to dp
public float pxTOdp(Context context, float px){
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float dp = px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return dp;
}
//dp to px
public float dpTOpx(Context context, float dp){
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return px;
}
위 방식을 활용하여 디바이스별로 UI 차이가 발생하지 않도록 주의하자