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);
와 같이 사용하면 된다.
'프로그래밍 > Android' 카테고리의 다른 글
다양한 구글 기본 앱 연동 (with INTENT call) (0) | 2018.10.24 |
---|---|
인텐트 필터(Intent Filter) (0) | 2018.10.24 |
AttributeSet 객체의 속성 리스트 출력 (0) | 2018.10.23 |
Android Spannable 적용 (0) | 2018.10.23 |
Android의 setTag()와 getTag() (0) | 2018.10.22 |