文来自:

http://blog.csdn.net/simayilong/article/details/6696765

--------------------------------------------

同时参考我的上一篇blog: http://blog.csdn.net/woshicaixianfeng/article/details/7075066


PopupWindow 跟我们的 Activity 不一样,因为我们在构造 PW 的时候往往不是继承来的,而是 new 出来的。所以不能使用重写 PW 的 onKeyDown() 之类的方法来截获键盘事件。好在 PW 本身的特性让我们很容易就能做到用返回键来退出,当然我们也可以截获键盘事件,

这样就有两种方法了。


方法一: 最简单的方法——

在 new 的时候,使用下面的方法:
popupWindow = new PopupWindow(popupWindow_view, 200, 150, true);

关键在于最后一个参数,SDK 给出的提示是 Focusable,顾名思义就是该 PW 的 Focusable 属性,让它能够接受焦点。
当然你可以用另一种构造函数,然后再去手动设置focusable属性:

popupWindow.setFocusable(true); // 一般都需要让popupWindow里面的组件获得焦点啊,往往用来接收用户输入或操作 动作


注意: 必须加入下面这行作用未知的语句才能发挥作用:
popupWindow.setBackgroundDrawable(newBitmapDrawable());// 响应返回键必须的语句。

请放心,设置 BackgroundDrawable 并不会改变你在配置文件中设置的背景颜色或图像。

方法二: 最通用的方法——



首先在 PW 的布局文件(*.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;
    }
});
上面两种方法的代码可以并存,当然如果使用第一种方法的话就不需要再捕获返回键了,不过你可以尝试捕获其他你需要的按键

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android:关闭软键盘自动弹出的解决方案
  5. android中使用SurfaceView做视频播放器--视频切换无缝连接
  6. android 8.0报错 Only fullscreen opaque activities can reques
  7. Android(安卓)JetPack——DataBinding
  8. Android里把Dialog设置为全屏的方法
  9. 2011.09.26(5)——— android sample之Notepad(TitleEditor)

随机推荐

  1. 【Android(安卓)Api 翻译4】android api
  2. Activity启动过程分析
  3. Android数据库操作查询中Cursor类的问题
  4. android UI线程安全问题
  5. android linux 最全的基础知识总结
  6. Android(安卓)EditText默认不弹出输入法
  7. Android(安卓)build system 分析之 envse
  8. 利用第三方jar包jaudiotagger实现与Media
  9. Android反编译工具绿色版V2.1(改进版)
  10. Android(安卓)Studio 3.1.1新版本 修改 c