問題:
Listview的item有個按鈕,點擊按鈕就彈出一個彈框,然後點擊彈框外部,彈框消失。問題來了,如果點擊是其他item裏的按鈕,只是響應彈框消失事件,並沒有觸發該按鈕的點擊事件,要再點一遍該按鈕,纔會彈出彈框,代碼如下:
PopupWindow pop = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, false);
// 需要設置一下此參數,點擊外邊可消失
pop.setBackgroundDrawable(new BitmapDrawable());
// 設置點擊窗口外邊窗口消失
pop.setOutsideTouchable(true);
// 設置此參數獲得焦點,否則無法點擊
pop.setFocusable(true);
System.out.println(" pop.height: " + popWH[1]);
pop.showAtLocation(viewHodler.img_isBusy, Gravity.NO_GRAVITY, x - popWH[0]-50, y - popWH[1] / 2);
解決:
關鍵還是在焦點,因爲彈框焦點設置的是true,所以點擊其他按鈕,不會觸發其他按鈕對應的事件,因爲焦點不在那個按鈕上。。所以只要設置成false就好了。
// 設置此參數失去焦點,這樣點擊其他按鈕才能響應相應的事件
pop.setFocusable(false);
這樣就實現了,點擊按鈕彈出彈框,點擊外部,彈框消失,如果點擊外部某個按鈕,先彈框消失,才觸發該按鈕的相應事件。。