有时候不是路不好走
只不过是没看清怎么走
最近做一些动画和位移的时候,遇到了一些奇怪的问题,主要是在屏幕高度上一直不知所措。
代码如下:
val Context.screenSize: Point
get() {
val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val displaySize = Point()
wm.defaultDisplay.getSize(displaySize)
return displaySize
}
高就是context.screenSize.y
但是在不同的手机上得到了不同的结果,某些计算正确,某些错误,偏差有一定规律,在折腾了半天debug后,发现了这个盲点:主要是在于不同的rom厂商对于虚拟三大金刚与状态栏的处理方式不一样。
如果想获取真正的绝对的屏幕高度,使用:
val Context.screenSize: Point
get() {
val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val displaySize = Point()
wm.defaultDisplay.getRealSize(displaySize)
return displaySize
}
区别就在于getSize与getRealSize
getRealSize是返回的真实屏幕宽高,getSize是去除了一些系统固定元素的高度(如状态栏),有些厂商的状态栏只是隐藏了,并没移除,有些则直接移除而非隐藏导致了这个结果。
而网上以前的大多数的文章使用的都是getSize,不能说他们用错了,但是需求不同不要直接复制粘贴。
以上。
本站由以下主机服务商提供服务支持:
qweenhool
所以因为厂商的不统一导致用getSize不太准确,用getRealSize获取屏幕真实宽高,然后根据自己需要处理才是最优解吧?
Mosaic-C
是的~ 以前没有刘海的时候就不必在意,现在则挖孔屏,刘海屏百花齐放,就必须要用 getRealSize 进行处理了。