遇到一個(gè)奇葩的bug。
自適應(yīng)高度的ViewPager 在頁面閃退時(shí),高度會拉長!有一段空白區(qū),特別丑!
分析
打斷點(diǎn),發(fā)現(xiàn)問題:
Resources.getSystem().displayMetrics.widthPixels 不是一個(gè)固定值
獲取設(shè)備寬高的代碼
val appWidth = Resources.getSystem().displayMetrics.widthPixels
val appHeight = Resources.getSystem().displayMetrics.heightPixels
1. 正常情況進(jìn)入頁面,返回 appWidth 為 1080
(寬度與設(shè)備有關(guān),因?yàn)樵擁撁媸菣M屏展示,所以取設(shè)備的寬來計(jì)算)

2. 頁面崩潰后,再次進(jìn)入頁面,返回 appWidth 為 2061

發(fā)現(xiàn)這個(gè)問題后,我都震驚了!??!
頁面方向仍是橫屏,為什么崩潰后返回的設(shè)備寬度值改變了?
而且變大了(導(dǎo)致頁面高度計(jì)算錯誤,出現(xiàn)了拉長的情況)
定位問題
多次復(fù)現(xiàn)(特意寫了一個(gè)數(shù)組下標(biāo)越界的bug),發(fā)現(xiàn)該值是固定值 2061 ,
也就是說該值可能是設(shè)備的一個(gè)參數(shù),考慮到可能會有橫屏的影響,
我斷點(diǎn)了設(shè)備的高度 appHeight 。
1. 正常情況下,設(shè)備的寬高值


看到這,你可能覺得完了,這里是2150 ,而不是2061,所以不是它!
你忽略了狀態(tài)欄的高度。
繼續(xù)往下看:
2. 崩潰后再次進(jìn)入頁面的設(shè)備寬高值


1080 !!!
要的就是 1080 ,設(shè)備真正的寬,但是現(xiàn)在appHeight的值是1080。
所以我取兩者最小值(如果你用高度,可以取最大值),再進(jìn)行計(jì)算。
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解決了?。。?/p>
一直以為在特定屏幕方向時(shí),其設(shè)備寬高是一個(gè)固定值,看來不是?。?br> Resources.getSystem().displayMetrics.widthPixels 不是一個(gè)固定值
