先給大家看看這個:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9F%A5%E8%AF%86%E5%BA%93/21462.shtml
可以說我也是受到了一點這個的啟發,雖然我的思路和這很不一樣,記錄下。
我沒有去試上面的方法,但看着應該也可以,但是我覺得不太妥,所以沒有用,大家想法不一樣,所以也貼上給大家看看,同時也感謝大神的提醒。
同求有更多,更好想法的人相互分享!!
ok,廢話不多說,進入正題:
問題是這樣,我在界面的個button,點擊顯示一個PopupWindow,需求是需要點擊它之外的地方讓它消失,我相信這也是很多用到它的人的共同需求,(另說一句,一查就能查到的,要setOutsideTouchable(true)有效果,還需要給PopupWindow設置背景)。可是我還想,當我再次點擊這個button時PopupWindow能消失,可是實際的效果是,當PopupWindow顯示時,點button,PopupWindow就消失了,這時button的click事件還會響應,並且判斷PopupWindow為沒有顯示,所以會再次把PopupWindow打開。
我的解決方法是,在顯示PopupWindow的Activity重寫dispatchTouchEvent(MotionEvent ev)方法,然后取消到PopupWindow的outside監聽,這時,點擊PopupWindow之外是不會消失的,但是我可以在Activity的dispatchTouchEvent(MotionEvent ev)方法監聽到,在這里,我判斷如果PopupWindow顯示着,就關了它,並返回true,讓這次的點擊事件不再傳到下面,也就是說,當再次點那個button時,其實這個button的click事件並沒有執行,但是PopupWindow關了,效果達成,上代碼:
public boolean dispatchTouchEvent(MotionEvent ev) { if (popupWindow != null && popupWindow.isShowing()) { popupWindow.dismiss(); return true; } return super.dispatchTouchEvent(ev); }
對了,再說一句,當點擊PopupWindow里的內容時,dispatchTouchEvent()是不會監聽的。。。