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

display.getRealMetrics()已废弃,官方推荐的替代方案是什么?

Android 12(API 级别 31)开始,Display#getRealMetrics() 被正式标记为废弃,官方推荐的替代方案根据使用场景分为两类:

场景1:获取当前应用窗口的实际显示尺寸(绝大多数业务场景推荐)

通过 WindowManager#currentWindowMetrics 直接获取当前绑定上下文的窗口边界,返回的尺寸包含应用占有的全部区域,兼容多窗口、折叠屏等多种设备形态:

val outMetrics = DisplayMetrics()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    val windowManager = getSystemService(WindowManager::class.java)
    val windowMetrics = windowManager.currentWindowMetrics
    val bounds = windowMetrics.bounds
    // 填充DisplayMetrics参数
    outMetrics.apply {
        density = resources.displayMetrics.density
        densityDpi = resources.displayMetrics.densityDpi
        scaledDensity = resources.displayMetrics.scaledDensity
        widthPixels = bounds.width()
        heightPixels = bounds.height()
    }
} else {
    // 低版本兼容逻辑,复用原有实现
    @Suppress("DEPRECATION")
    val display = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        display
    } else {
        windowManager.defaultDisplay
    }
    @Suppress("DEPRECATION")
    display?.getRealMetrics(outMetrics)
}

场景2:获取设备整块屏幕的最大物理尺寸

如果需要获取包含状态栏、导航栏等全部系统装饰区域的完整屏幕尺寸,使用 WindowManager#getMaximumWindowMetrics 即可:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    val maxWindowMetrics = getSystemService(WindowManager::class.java).maximumWindowMetrics
    val fullScreenWidth = maxWindowMetrics.bounds.width()
    val fullScreenHeight = maxWindowMetrics.bounds.height()
}

注意:不推荐直接通过 resources.displayMetrics 获取宽高,该方法返回的是应用的可用绘制区域尺寸,不会包含沉浸式区域、系统栏等部分,多窗口模式下取值也会和预期不符。


内容的提问来源于stack exchange,提问作者Tariq Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:01