popUpWindow响应返回键并关闭

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20801369/article/details/75103472

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;
    }
});


展开阅读全文

没有更多推荐了,返回首页