PopupWindow响应返回键的问题

假设情景是这样的:在一个Activity中弹出一个PopupWindow,要求在按返回键时关闭该PopupWindow。

如果该PopupWindow是无焦点的(默认情况),那么可以在Activity中响应返回键(onBackPressed),然后关闭它。

如果该PopupWindow是有焦点的,那么在它弹出来之后,所有的按键和触摸事件都会被它截获,包括返回键。

让PopupWindow获得焦点有两种方法,第一种是在创建的时候指定,第二种是在创建之后,调用它的setFocusable方法指定。

但是仅仅使PopupWindow获得焦点还不行,此时它不响应返回键,也就是说,按返回键的时候PopupWindow并不会关闭。

如果需要PopupWindow响应返回键,那么必须给PopupWindow设置一个背景才行,下面是通常的做法:

setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00000000);
setBackgroundDrawable(dw);
时间: 2025-01-14 02:30:22

PopupWindow响应返回键的问题的相关文章

Fragment响应返回键

Activty可以直接响应返回键,而Fragment却不行,可用如下方式: 创建一个抽象类BackHandledFragment,该类中有一个抽象方法onBackPress(),所有BackHandledFragment的子类在onBackPress()中处理各自对Back事件的响应逻辑.onBackPress()返回boolean值,宿主FragmentActivity将会根据该方法的返回值判断子Fragment是否有消费Back事件.此外,宿主FragmentActivity还会保持一份当前

点击返回键退出popupwindow的方法

点击返回键退出popupwindow mPopupWindow.setFocusable(true); 这句非常重要,对背景不会有影响 mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 然后再设置它的键监听器 mView.setOnKeyListener(onKeyListener); private OnKeyListener onKeyListener=new OnKeyListener() { @Override publi

Cocos2d-x响应android返回键

开启按键按键监听 setKeypadEnabled(true); 重写监听事件函数 virtual void keyBackClicked(); 如: void BanQiuLayer::keyBackClicked() { //暂停声音播放 CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); mag->toBeginLayer(); //返回到上一个场景 } Cocos2d-x响应android返

安卓Dialog关闭空白区域及返回键点击响应

在Android开发中,常常需要调用对话框,但会遇到这样一种情况,在显示对话框的时候,点击对话框以外的屏幕其他区域,会关闭对话框,处理不当还可能引发如下异常. 本文主要针对对话框来说,我们不希望响应空白区域或返回键,则可以进行相应的设置: AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setCanceledOnTouchOutside(false);调用这个方法时,按对话框以外的地方不起作用.按返回

微信小程序自定义导航栏(wx_custom_navigation_bar) 自定义返回键、首页键,动态设置标题,响应式组件

微信小程序自定义导航栏 navigation bar 返回键 首页 github: https://github.com/chen-yt/wx_custom_navigation_bar https://github.com/Superman2113/wx_custom_navigation_bar 代码 navbar组件 navbar.wxml <view class="navbar" style="{{'height: ' + navigationBarHeight

重写dispatchKeyEvent方法 按返回键back 执行两次的解决办法

重写dispatchKeyEvent方法 按返回键back 执行两次的解决方法 @Override   public boolean dispatchKeyEvent(KeyEvent event) {           if(event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() != KeyEvent.ACTION_UP) {//不响应按键抬起时的动作                //TODO 代码    

Android双击返回键退出Activity的方法

第一种:利用线程延时实现: private int mBackKeyPressedTimes = 0; @Override public void onBackPressed() { if (mBackKeyPressedTimes == 0) { Toast.makeText(this, "再按一次退出程序 ", Toast.LENGTH_SHORT).show(); mBackKeyPressedTimes = 1; new Thread() { @Override public

关于cocos2dx3.2返回键问题以及ansi转utf8的问题

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近在学习的过程中重新整理了一下代码,顺便把cocos2dx从3.0升到了3.2.这里记录一下升级过程中的问题. 之所以只升到3.2是因为后面的版本使用了lua5.2,而我还是更喜欢用5.1,而且能继续使用luajit,另外一个原因是因为cocosstudio,3.2后面的版本就导出成csd格式了,我不是很喜欢这种改变,我还是喜欢直接导出json文件,在lua中加载(其实是不想改代码啦.).个人认为,c

Android 返回键双击退出程序

/** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exitBy2Click();// 调用双击退出函数 } return false; } private long exitTime = 0; /** * 双击退出:利用计算时间差实现 */ public void exitBy2Click() { i