You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:11:00