스크린 사이즈를 구하는 메소드들의 차이를 정리해보았다.
💙 getSize()
- 시스템 UI 제외 또는 포함 (API에 따라 다름).
- Deprecated in API level 30
@return Point
💙 getRealSize()
- 실제 화면 크기 (시스템 UI 포함). 상태바에 달린 카메라 영향 O
- Deprecated in API level 31
@return Point
💙 getMetrics()
- 시스템 UI 제외, 사용 가능 영역. status bar 에 카메라가 달린 폰과 아닌 폰에서 가져오는 높이 값이 다름.
- Deprecated in API level 30
@return DisplayMetrics
💙 getRealMetrics()
- 실제 화면 크기 (시스템 UI 포함). status bar 에 카메라가 달린 폰과 아닌 폰 상관없이 디바이스의 실제 해상도 값을 리턴.
- Deprecated in API level 31
@return DisplayMetrics
스크린 사이즈를 구하는 중 deprecated 된 메소드들이 있어서 분기 처리를 해주었다.
'getRealMetrics(DisplayMetrics!): Unit' is deprecated. Deprecated in Java
'getter for defaultDisplay: Display!' is deprecated. Deprecated in Java
fun getScreenSize(context: Context): Pair<Int, Int> {
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
return when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
val windowMetrics = windowManager.currentWindowMetrics
val bounds = windowMetrics.bounds
Pair(bounds.width(), bounds.height())
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
val display = DisplayManagerCompat.getInstance(context).getDisplay(Display.DEFAULT_DISPLAY)
val displayMetrics = DisplayMetrics()
display?.getRealMetrics(displayMetrics)
Pair(displayMetrics.widthPixels, displayMetrics.heightPixels)
}
else -> {
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getRealMetrics(displayMetrics)
Pair(displayMetrics.widthPixels, displayMetrics.heightPixels)
}
}
}
참고 : https://developer.android.com/reference/android/view/WindowManager?_gl=1*1gtlwsa*_up*MQ..*_ga*MTczMTY5NTM5Mi4xNzI0OTE5NTg3*_ga_6HH9YJMN9M*MTcyNDkxOTU4Ny4xLjAuMTcyNDkxOTU4Ny4wLjAuMA..
https://developer.android.com/reference/android/view/Display?_gl=1*1ivze56*_up*MQ..*_ga*MTIzODA2MTA2NS4xNzI0ODk3ODE4*_ga_6HH9YJMN9M*MTcyNDg5NzgxNy4xLjAuMTcyNDg5NzgxNy4wLjAuMA..
https://appdev-room.com/android-devise-size
https://stackoverflow.com/questions/70015724/display-getrealmetrics-is-deprecated
https://doa-oh.tistory.com/180