1. 程式人生 > >Dialog和PopupWindow的區別

Dialog和PopupWindow的區別

## Android中的對話方塊有多種:Toast,OptionsMenu,PopupWindow和Dialog。它們都可以實現彈窗功能,但是他們之間有一些差別,下面我們先對比Dialog和PopuWindow區別。
  • Popupwindow在顯示之前一定要設定寬高,Dialog無此限制。
  • Popupwindow預設不會響應物理鍵盤的back,除非顯示設定了popup.setFocusable(true);而在點選back的時候,Dialog會消失。

  • Popupwindow不會給頁面其他的部分新增蒙層,而Dialog會。

  • Popupwindow沒有標題,Dialog預設有標題,可以通過dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);取消標題

  • 二者顯示的時候都要設定Gravity。如果不設定,Dialog預設是Gravity.CENTER。

  • 二者都有預設的背景,都可以通過setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。

其中最本質的差別就是:AlertDialog是非阻塞式對話方塊:AlertDialog彈出時,後臺還可以做事情;而PopupWindow是阻塞式對話方塊:PopupWindow彈出時,程式會等待,在PopupWindow退出前,程式一直等待,只有當我們呼叫了dismiss方法的後,PopupWindow退出,程式才會向下執行。這兩種區別的表現是:AlertDialog彈出時,背景是黑色的,但是當我們點選背景,AlertDialog會消失,證明程式不僅響應AlertDialog的操作,還響應其他操作,其他程式沒有被阻塞,這說明了AlertDialog是非阻塞式對話方塊;PopupWindow彈出時,背景沒有什麼變化,但是當我們點選背景的時候,程式沒有響應,只允許我們操作PopupWindow,其他操作被阻塞。