title: popupWindow的一個坑
date: 2016-12-05 10:33:27
tags: problems
- PopupWindow這東西可以說大量存在于各種app里赂蕴,
popupWindow = new PopupWindow(popupWindowView, DP2PX.dip2px(this, 149F), LinearLayout.LayoutParams.WRAP_CONTENT, true);
通常會這么寫毅舆,最后一個true表示獲取焦點,這樣做有一個好處树埠,當點擊pop以外的區(qū)域,都會讓pop消失辟宗,同時因為焦點在pop上早处,點擊外面的按鈕因為按鈕沒有焦點所以不會觸發(fā)點擊事件。這也是符合一般用戶習慣的途样,如下圖
西卡西!1舯铩何暇!如果我要相應外部的點擊事件呢?
如果你認為:那好辦凛驮,調(diào)用另一個構(gòu)造方法裆站,不獲取焦點不就行了。
曾經(jīng)我也是這么的年輕黔夭。宏胯。。不獲取焦點本姥,確實能夠讓外部響應點擊事件肩袍,然而
彈出pop的那個按鈕也響應了點擊事件了啊喂!婚惫! 用戶習慣通常應該是點擊一次氛赐,彈出popup魂爪,再點擊一次,消失凹韫堋滓侍!
這樣爽么?這肯定不是我們想要的
那么如何讓這個按鈕不要響應點擊事件或者響應了點擊事件但是關(guān)閉pop而不是再次打開呢
你可能又會想到:監(jiān)聽pop的開閉狀態(tài)牲芋,搞個變量記住粗井,在點擊事件里根據(jù)這個變量判斷不就行了?
too young to simple街图,當pop外部被獲取焦點的時候,pop會消失懒构,這個時候你的標記就會被改成了關(guān)閉狀態(tài)餐济,然后才會觸發(fā)點擊事件,此時認為pop是關(guān)閉的胆剧,那么會再次打開絮姆,做了這么多事等于白干!
說了辣么多秩霍,怎么解決呢篙悯?
在popupwindow.setOnDismissListener()里記錄關(guān)閉的時間,在點擊時間里用當前時間與這個時間對比铃绒,大于500ms鸽照,才打開,沒錯這是hardcode颠悬,你們有好的解決辦法請告訴我