Android popupWindow 點選外部消失,點選外部其他控制元件觸發其他事件
阿新 • • 發佈:2019-02-01
問題:
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);
這樣就實現了,點選按鈕彈出彈框,點選外部,彈框消失,如果點選外部某個按鈕,先彈框消失,才觸發該按鈕的相應事件。。