Android Fragments 如何在Display.getRealSize()和Display.getRealMetrics()方法弃用后使用WindowMetrics?

yi0zb3m4  于 2022-11-24  发布在  Android
关注(0)|答案(1)|浏览(282)

在Android 12中,Google继续推荐使用WindowMetrics,并反对使用这些方法:
显示.getRealSize()
显示.getRealMetrics()
如何将此代码转换为Android 12迁移

val display: Display = windowManager.defaultDisplay
 val size = Point()
 display.getRealSize(size)

 val display: Display = activity.windowManager.defaultDisplay
 val outMetrics = DisplayMetrics()
 display.getRealMetrics(outMetrics)
pkwftd7m

pkwftd7m1#

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
}

相关问题