假設情景是這樣的:在一個Activity中彈出一個PopupWindow,要求在按返回鍵時關閉該PopupWindow。
如果該PopupWindow是無焦點的(默認情況),那么可以在Activity中響應返回鍵(onBackPressed),然后關閉它。
如果該PopupWindow是有焦點的,那么在它彈出來之后,所有的按鍵和觸摸事件都會被它截獲,包括返回鍵。
讓PopupWindow獲得焦點有兩種方法,第一種是在創建的時候指定,第二種是在創建之后,調用它的setFocusable方法指定。
但是僅僅使PopupWindow獲得焦點還不行,此時它不響應返回鍵,也就是說,按返回鍵的時候PopupWindow並不會關閉。
如果需要PopupWindow響應返回鍵,那么必須給PopupWindow設置一個背景才行,下面是通常的做法:
setFocusable(true); ColorDrawable dw = new ColorDrawable(0x00000000); setBackgroundDrawable(dw);