我使用了getSize()方法来获取屏幕尺寸:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val fragmentActivity = requireActivity()
...
val wm = fragmentActivity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val display = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
fragmentActivity.display
} else {
wm.defaultDisplay
}
val size = Point()
display?.getSize(size)
// get screen sizes
val width = size.x
val height = size.y
...
}
但是在API level 30中,方法getSize()被声明为不推荐使用。
获取屏幕尺寸时可以使用什么替代getSize()?
感谢任何评论/答案!
解决方案:
val wm = fragmentActivity.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val width: Int
val height: Int
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val windowMetrics = wm.currentWindowMetrics
val windowInsets: WindowInsets = windowMetrics.windowInsets
val insets = windowInsets.getInsetsIgnoringVisibility(
WindowInsets.Type.navigationBars() or WindowInsets.Type.displayCutout())
val insetsWidth = insets.right + insets.left
val insetsHeight = insets.top + insets.bottom
val b = windowMetrics.bounds
width = b.width() - insetsWidth
height = b.height() - insetsHeight
} else {
val size = Point()
val display = wm.defaultDisplay // deprecated in API 30
display?.getSize(size) // deprecated in API 30
width = size.x
height = size.y
}
WindowManager
在v1.0.0-alpha10中被移除,推荐使用WindowInfoRepository
或WindowMetricsCalculator
。我刚刚更新了答案。谢谢。 - David Miguel