前言

今天在寫公司專案的時候遇到部分 Android 7 的手機,PopupWindow 不會理會設置好的 gravity,會直接跑到頂部。

原因

Android Code Search 追了一下原始碼,發現 Android 7 在執行 PopupWindow.update() 的時候,會將 gravity 重設,因此造成 gravity 被重置為 Gravity.START | Gravity.TOP

有興趣的話可以自己看一下 Google 後來修復的 commit

解法

剛好出問題的那段程式看起來沒有必要使用 update(),因此拿掉後問題就修復了。當然如果你一定需要使用 update() 的話,可以參考這篇 SlackOverflow,裡面有各種大神給的解法,這邊就不贅述囉!