반응형
안드로이드를 지원하는 스마트 폰은 제조사가 다양해 각각 디바이스마다 가로/세로 사이즈나 비율 등이 아이폰에 비해 종류가 굉장히 많습니다. 그래서 디바이스마다 반응형으로, 어떤 사이즈의 앱에서도 디자인 문제가 발생하지 않도록 하는 것이 안드로이드 앱 개발자의 고충이죠.
이에 따라 안드로이드에서는 나인 패치 이미지, mdpi~xxxhdpi 등 해상도별 리소스 제공 등을 지원해주고 있지만, 이와 별개로 디바이스의 가로길이 혹은 세로 길이에 따라 임의로 처리해주고 싶은 경우가 생깁니다.
Code
디바이스의 가로 세로 길이를 구하기 위해서는 Activity의 WindowManager를 불러와야 합니다. 그리고 Display 객체를 통해 사이즈를 구할 수 있습니다.
이때 2가지 함수가 있는데요.
바로 getRealSize()와 getSize() 입니다.
getRealSize()는 status bar 등 system instets을 포함한 스크린 사이즈를 가져오는 방법이고, getSize()는 status bar 등 insets를 제외한 부분에 대한 사이즈만 가져오는 함수입니다.
코드는 아래와 같습니다.
Kotlin
val display = windowManager.defaultDisplay // in case of Activity
/* val display = activity!!.windowManaver.defaultDisplay */ // in case of Fragment
val size = Point()
display.getRealSize(size) // or getSize(size)
val width = size.x
val height = size.y
Java
Display display = getWindowManager().getDefaultDisplay(); // in Activity
/* getActivity().getWindowManager().getDefaultDisplay() */ // in Fragment
Point size = new Point();
display.getRealSize(size); // or getSize(size)
int width = size.x;
int height = size.y;
참고로, size에 저장되는 가로/세로 길이의 단위는 픽셀(Pixel)입니다.
반응형
'Android > Basic' 카테고리의 다른 글
[Android] 액티비티 옆으로 전환하기(feat. Transition) (2) | 2019.11.29 |
---|---|
[androidx] 아래로 스크롤시 AppBar(ToolBar) 숨기기(feat. CoordinatorLayout) (2) | 2019.11.19 |
[Android] 화면 회전(Screen Rotation) 방지하기 (0) | 2019.10.17 |
[Android] Activity, Service 여러 번 호출시 인스턴스는? (0) | 2019.08.19 |
안드로이드의 쓰레드(Thread)와 핸들러(Handler) (3) | 2019.08.08 |