1. 程式人生 > >popUpWindow響應返回鍵並關閉

popUpWindow響應返回鍵並關閉

1.

直接新增下面兩行程式碼

popupWindow.setOutsideTouchable(true);
這個函式的意義,就是指,PopupWindow以外的區域是否可點選,即如果點選PopupWindow以外的區域,PopupWindow是否會消失。
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
設定popUpWindow外部可點選,並設定背景,此時在原來的view之上生成一個派生自FrameLayout的PopupViewContainer,
將view作為PopupViewContainer的子佈局,PopupViewContainer會捕捉KeyEvent.KEYCODE_BACK事件
2.
首先在 popupWindow的佈局檔案(*.xml)中隨意選取一個不影響任何操作的 View,推薦使用最外層的 Layout。

然後設定該 Layout 的 Focusable 和 FocusableInTouchMode 都為 true。
接著回到程式碼中,獲取該 View 的例項,
現在你就可以對該 View 重寫 OnKeyListener() 事件了。
我們可以手動捕獲 KEYCODE_BACK 給對話方塊 dismiss()。
privatePopupWindow pw;
privateView view;
privateLinearLayout layMenu;
 
LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.popup_main_menu,null, false);
layMenu = (LinearLayout) view.findViewById(R.id.layMenu);
pw =new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);
 
layMenu.setOnKeyListener(newOnKeyListener()
{
    publicboolean onKey(View v, intkeyCode, KeyEvent event)
    {
        if(event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK)
            pw.dismiss();
 
        returnfalse;
    }
});