프로그래밍/Android

[Android] px 과 dip 단위 변환

프리월드 2012. 10. 8. 17:12

- 안드로이드에서 다양한 화면크기의 기기들을 지원하려면 고정 단위인 px 보다 밀도에 따른 논리 단위인 dip 를 사용해야한다.

  하지만 안드로이드 api  소스코드들의 크기는 px 단위를 사용한다. 따라서 dip를 px 로 변환하여 사용하는 방법이 필요.

- 안드로이드 개발자 사이트 화면 관련 

  http://developer.android.com/guide/practices/screens_support.html


다양한 3가지 방법

- 입맛에 맞춰 사용하자

- 아래소스는 10 dip 를 pixel 로 변환한다는 것을 가정한다.


1. 안드로이드 dev 사이트에 소개된 방식


final float scale = getResources().getDisplayMetrics().density// 화면의 밀도를 구한다.

float dip = 10.0f;  // 변환하고자하는 dip 치수

int pixel = (int) (dip  * scale + 0.5f); // 변환하는데 0.5 는 반올림을 위하여 붙여줌.




2. 리소스를 이용한 방식

 

res / values / dimens.xml 파일을 생성하고 dimen 엘리먼트를 이용하여 원하는 dip 치수 저장


<dimen name="dip_size">10dip</dimen>


================================================================================================================


// dimens 에서 저장했던 엘리먼트를 불러오면 자동으로 pixel 단위로 변환.

int pixel = (int)getResources().getDimension(R.dimen.dip_size);




3. TypedValue 클래스를 이용한 방식

 

DisplayMetrics dm =  getResources().getDisplayMetrics();

int pixel = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP10 , dm);