(1)Popupwindow在顯示之前一定要設(shè)置寬高,Dialog無此限制。
(2)Popupwindow默認(rèn)不會響應(yīng)物理鍵盤的back,除非顯示設(shè)置了popup.setFocusable(true);而在點擊back的時候,Dialog會消失。
(3)Popupwindow不會給頁面其他的部分添加蒙層,而Dialog會。
(4)Popupwindow沒有標(biāo)題,Dialog默認(rèn)有標(biāo)題,可以通過dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消標(biāo)題
(5)二者顯示的時候都要設(shè)置Gravity。如果不設(shè)置,Dialog默認(rèn)是Gravity.CENTER。
(6)二者都有默認(rèn)的背景,都可以通過setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。
其中最本質(zhì)的差別就是:AlertDialog是非阻塞式對話框:AlertDialog彈出時,后臺還可以做事情;而PopupWindow是阻塞式對話框:PopupWindow彈出時,程序會等待,在PopupWindow退出前,程序一直等待,只有當(dāng)我們調(diào)用了dismiss方法的后,PopupWindow退出,程序才會向下執(zhí)行。這兩種區(qū)別的表現(xiàn)是:AlertDialog彈出時,背景是黑色的,但是當(dāng)我們點擊背景,AlertDialog會消失,證明程序不僅響應(yīng)AlertDialog的操作,還響應(yīng)其他操作,其他程序沒有被阻塞,這說明了AlertDialog是非阻塞式對話框;PopupWindow彈出時,背景沒有什么變化,但是當(dāng)我們點擊背景的時候,程序沒有響應(yīng),只允許我們操作PopupWindow,其他操作被阻塞。我們在寫程序的過程中可以根據(jù)自己的需要選擇使用Popupwindow或者是Dialog。