PopupWindow顯示showAsDropDown和showAtLocation區別
阿新 • • 發佈:2019-01-06
PopupWindow中showAsDropDown和showAtLocation區別
- showAtLocation
- showAsDropDown
showAtLocation(相對於元件parent螢幕)
public void showAtLocation(View parent, int gravity, int x, int y)
- parent可以為Activity中的任意一個View(最終的效果一樣),會通過這個View找到其父Window,也就是Activity的Window。
- gravity,預設為Gravity.NO_GRAVITY,等效於Gravity.LEFT | Gravity.TOP
- x, y,邊距。這裡的x,y表示距離Window邊緣的距離,方向由Gravity決定。例如:設定了Gravity.TOP,則y表示與Window上邊緣的距離;而如果設定了Gravity.BOTTOM,則y表示與下邊緣的距離。
- 如果彈窗位置超出了Window的範圍,會自動處理使其處於Window中
- 相對於螢幕(左上角0,0),窗位置超出了Window的範圍,會自動處理使其處於Window中,顯示範圍是頂部和底部
注意使用的時候,如果設定Gravity.TOP,則要計算狀態列的高度
showAsDropDown(相對於元件)
public void showAsDropDown (View anchor, int xoff, int yoff)
- 彈窗會顯示在anchor控制元件的正下方。
- 如果指定了xoff和yoff,則會在原有位置向右偏移xoff,向下偏移yoff。
- 如果指定gravity為Gravity.RIGHT,則彈窗和控制元件右對齊;否則左對齊。注意,計算右對齊時使用了- PopupWindow的寬度,如果指定的寬度不是固定值,則計算會失效(可以從原始碼中看出來)。
- 如果彈窗位置超出了Window的範圍,會自動處理使其處於Window中。
- 如果anchor可以滾動,則滾動過程中,PopupWindow可以自動更新位置,跟隨anchor控制元件。
- 相對於元件(左下角 0,螢幕高度)
總結:showAtLocation 和 showAsDropDown 主要區別於顯示位置相對於螢幕還是元件