我把最重要的核心本質(zhì)區(qū)別寫出來:
它們的相同點(diǎn):它們都是彈窗
基本區(qū)別:popupwindow在顯示之前一定要設(shè)置寬高,Dialog沒有;popupwindow默認(rèn)不會(huì)響應(yīng)物理鍵盤的返回鍵,只有設(shè)置了popup.setfocusable(true)時(shí)才會(huì)響應(yīng),Dialog會(huì)響應(yīng)物理鍵盤;popupwindow不會(huì)給頁(yè)面其他部分添加蒙阪,dialog會(huì)。;popupwindow沒有標(biāo)題,dialog默認(rèn)有標(biāo)題,可以通過dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消標(biāo)題;二者顯示的時(shí)候都要設(shè)置Gravity。如果不設(shè)置,Dialog默認(rèn)是Gravity.CENTER。
核心區(qū)別:Dialog是非阻塞式對(duì)話框,AlertDialog彈出時(shí)后臺(tái)還可以做其他事情,popupwindow是阻塞式對(duì)話框,popupwindow彈出時(shí)程序會(huì)等待,在popupwindow結(jié)束前程序會(huì)一直等待,當(dāng)調(diào)用diamiss方法后popupwindow彈窗關(guān)閉程序才向下進(jìn)行。
(這兩種表現(xiàn)最直接的解釋方式:AlertDialog彈出時(shí)背景是黑的,當(dāng)我們點(diǎn)擊背景時(shí)AlertDialog會(huì)消失,這證明了程序不僅響應(yīng)會(huì)AlertDialog,還會(huì)響應(yīng)其他操作,這證明AlertDialog是非阻塞式對(duì)話框;popupwindow彈出時(shí)背景沒什么變化,當(dāng)我們點(diǎn)擊背景時(shí)程序沒有響應(yīng),只允許我們操作popupwindow,其他操作被阻塞)