본문 바로가기
프로그래밍/Android

DisplayMetrics 객체의 스마트폰의 크기 정보 구하기

by Mr-후 2018. 10. 23.
반응형

DisplayMetrics 객체의 스마트폰의 크기 정보 구하기


얼마전에 오픈소스를 이용해서 애니메이션을 그리는 기능을 개발한 적이 있다. 아직 서투른 안드로이드 소스를 보면서 맨땅에 헤딩을 많이 했던 기억이 나는데 이번에 책을 보면서 보니, 그 때 봤던 코드들이 제법 많이 있고 궁금했던 부분들이 해소가 많이 되었다. 

동적으로 그려지는 메뉴의 크기를 픽셀이 아닌 논리적 크기로 그려야하고 대부분의 스마트폰에서 동일한 크기로 보여지게 만들어야하는 상황이었는데 구하게 된 오픈소스에 그런 코드들이 있었던 것 같다. 


자바 코드상에서 논리적 크기를 획득하는 예제 코드가 있어서 올려 본다. 

DisplayMetrics dm = getResources().getDisplayMetrics(); 

float strokeWidth = 15 * dm.density;  

int rectWith = (int)(150 * dm.density); 

int rectHeight = (int)(150 * dm.density); 

int position = (int)(10 * dm.density); 


Paint paint = new Paint(); 

paint.setColor(Color.RED); 

paint.setStyle(Paint.Style.STROKE); 

paint.setStrokeWidth(strokeWidth); 


Rect rect = new Rect(position, position, rectWidth, rectHeight); 

canvas.drawRect(rect, paint); 


DisplayMetrics 객체를 이용해 모든 크기와 위치를 동적으로 계산해 적용한 예. 


이와 달리 리소스로 등록해서 사용하는 방법은 다음과 같다. 

values/dimens.xml 파일에 사용하고자 하는 크기를 논리 단위를 이용하여 등록한 뒤, 

<dimen name="strokeWidth">15dp</dimen>

<dimen name="size">150dp</dimen>

<dimen name="position">10dp</dimen>


자바 코드에서 

int size = context.getResources().getDimensionPixelSize(R.dimen.size); 

int strokeWidth = context.getResources().getDimensionPixelSize(R.dimen.strokeWidth); 

와 같이 사용하면 된다. 


반응형