美文网首页
页面闪退后自适应高度的ViewPager高度会拉长 & Reso

页面闪退后自适应高度的ViewPager高度会拉长 & Reso

作者: 南窗云 | 来源:发表于2018-11-14 12:08 被阅读0次

    遇到一个奇葩的bug。

    自适应高度的ViewPager 在页面闪退时,高度会拉长!有一段空白区,特别丑!

    分析

    打断点,发现问题:
    Resources.getSystem().displayMetrics.widthPixels 不是一个固定值

    获取设备宽高的代码

    val appWidth = Resources.getSystem().displayMetrics.widthPixels
    val appHeight = Resources.getSystem().displayMetrics.heightPixels
    

    1. 正常情况进入页面,返回 appWidth 为 1080
    (宽度与设备有关,因为该页面是横屏展示,所以取设备的宽来计算)

    正常情况下,进入页面

    2. 页面崩溃后,再次进入页面,返回 appWidth 为 2061

    页面崩溃后,再次进入页面

    发现这个问题后,我都震惊了!!!
    页面方向仍是横屏,为什么崩溃后返回的设备宽度值改变了?
    而且变大了(导致页面高度计算错误,出现了拉长的情况)

    定位问题

    多次复现(特意写了一个数组下标越界的bug),发现该值是固定值 2061 ,
    也就是说该值可能是设备的一个参数,考虑到可能会有横屏的影响,
    我断点了设备的高度 appHeight 。

    1. 正常情况下,设备的宽高值

    看到这,你可能觉得完了,这里是2150 ,而不是2061,所以不是它!
    你忽略了状态栏的高度。
    继续往下看:

    2. 崩溃后再次进入页面的设备宽高值

    1080 !!!
    要的就是 1080 ,设备真正的宽,但是现在appHeight的值是1080。
    所以我取两者最小值(如果你用高度,可以取最大值),再进行计算。

                val systemHeight = if (appWidth > appHeight) appHeight else appWidth
    
                if (height < systemHeight - top) {
                    height = systemHeight - top
                    maxList.add(height)
                } else {
                    maxList.add(height)
                }
                height = maxList.max()!!
    
    

    bug解决了!!!


    一直以为在特定屏幕方向时,其设备宽高是一个固定值,看来不是!!
    Resources.getSystem().displayMetrics.widthPixels 不是一个固定值

    うずまき ナルト

    相关文章

      网友评论

          本文标题:页面闪退后自适应高度的ViewPager高度会拉长 & Reso

          本文链接:https://www.haomeiwen.com/subject/hdidfqtx.html