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

Android中getRealMetrics与defaultDisplay.getMetrics过时问题求解决方案

解决DisplayMetrics相关过时API的替代方案

方案一:适配全版本的densityDpi获取代码

直接替换原有逻辑,用官方推荐的API替代过时方法:

val densityDpi: Int = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    // Android 11及以上:使用Display的metrics属性
    context.display?.metrics?.densityDpi ?: DisplayMetrics.DENSITY_DEFAULT
} else {
    // Android 10及以下:用getRealMetrics替代过时的getMetrics,添加注解消除警告
    val displayMetrics = DisplayMetrics()
    @Suppress("DEPRECATION")
    context.getSystemService(WindowManager::class.java)?.defaultDisplay?.getRealMetrics(displayMetrics)
    displayMetrics.densityDpi
}

方案二:针对Android 11+的窗口精确Metrics获取

如果需要获取当前应用窗口的真实显示参数(包含系统UI占用空间),可以用WindowMetrics:

val densityDpi: Int = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    val windowManager = context.getSystemService(WindowManager::class.java)
    val windowMetrics = windowManager.currentWindowMetrics
    windowMetrics.density.dpi
} else {
    val displayMetrics = DisplayMetrics()
    @Suppress("DEPRECATION")
    context.getSystemService(WindowManager::class.java)?.defaultDisplay?.getRealMetrics(displayMetrics)
    displayMetrics.densityDpi
}

补充说明

如果场景不需要严格区分真实屏幕和应用窗口,也可以直接使用context.resources.displayMetrics.densityDpi,这个API未过时,能满足大多数常规需求。

内容的提问来源于stack exchange,提问作者Hrithik Rajput

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:57:18