popUpWindow響應返回鍵並關閉
阿新 • • 發佈:2019-01-05
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;
}
});