Display.getRealSize()等方法弃用后,Android 12如何使用WindowMetrics?
Android 12 中 Display.getRealSize()/getRealMetrics() 的迁移方案
核心替代方案:使用 WindowMetrics
Android 12 及以上版本官方推荐用 WindowMetrics 获取屏幕尺寸,替代已弃用的 Display.getRealSize() 和 Display.getRealMetrics() 方法。
1. 替代 Display.getRealSize() 的代码
原代码:
val display: Display = windowManager.defaultDisplay val size = Point() display.getRealSize(size)
迁移后代码:
// Activity 内部直接调用 val windowMetrics = windowManager.currentWindowMetrics val bounds = windowMetrics.bounds val width = bounds.width() val height = bounds.height() // 如需保留 Point 对象格式 val size = Point(width, height)
2. 替代 Display.getRealMetrics() 的代码
原代码:
val display: Display = activity.windowManager.defaultDisplay val outMetrics = DisplayMetrics() display.getRealMetrics(outMetrics)
迁移后代码:
// Activity 内部直接调用 val windowMetrics = activity.windowManager.currentWindowMetrics val outMetrics = DisplayMetrics().apply { widthPixels = windowMetrics.bounds.width() heightPixels = windowMetrics.bounds.height() // 密度相关参数可直接从 Resources 中获取 density = activity.resources.displayMetrics.density densityDpi = activity.resources.displayMetrics.densityDpi scaledDensity = activity.resources.displayMetrics.scaledDensity }
低版本兼容处理
如果需要兼容 Android 12 以下版本,可通过版本判断分支实现:
val width: Int val height: Int if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { val windowMetrics = windowManager.currentWindowMetrics width = windowMetrics.bounds.width() height = windowMetrics.bounds.height() } else { val display = windowManager.defaultDisplay val size = Point() display.getRealSize(size) width = size.x height = size.y }
内容的提问来源于stack exchange,提问作者Laksh Lathiya
相关产品推荐
相关产品推荐

