首页 > 解决方案 > Android 获取屏幕可用大小 api 28

问题描述

我已经尝试了很多东西,比如:

val wm = c.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val display = wm.defaultDisplay
val size = Point()
display.getSize(size)
screenHeight = size.y

最后,跨不同设备尺寸最通用的一种是:

   val v = requireActivity().findViewById<ViewGroup>(android.R.id.content)
   v.viewTreeObserver.addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener{
                override fun onGlobalLayout() {
                    v.viewTreeObserver.removeOnGlobalLayoutListener (this)
                    val editor = sharedPreferences.edit()
                    editor.putInt("usableScreenHeight", v.height)
                    editor.apply()
                }
            })

我也在一些真实的设备上对此进行了测试,它似乎有效。但是,在我的 Android Studio 模拟器中,使用 Api 28(例如,它适用于相同的设备和 api 24),我得到了一个更大的状态栏,就像图片中的那个一样。我通过的大小viewTreeObserver是相同的,但是由于状态栏更大,我的内容向下移动。我的代码错了吗?我的模拟器有问题吗?有什么变化api 28吗?

在此处输入图像描述

标签: androidandroid-studiostatusbar

解决方案


推荐阅读