Android解决dialog弹出时无法捕捉Activity的back事件的方法

   本文实例讲述了Android解决dialog弹出时无法捕捉Activity的back事件的方法。分享给大家供大家参考。具体分析如下:

  在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件:

  1)重写onKeyDown或者onKeyUp方法

  2)重写onBackPressed方法

  3)重写dispatchKeyEvent方法

  这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料。

  然而在有dialog弹出时,想捕捉back键的事件的话,上述三种办法都无法实现。因为上述方法是重写在activity里面的,也就是说当activity是当前焦点时,它可以捕捉到相应的back键事件,而有dialog弹出时,dialog获取了当前焦点,所以activity里面的方法无法获取到back键事件,此时有两种思路:

  1)设置dialog的setOnCancelListener监听:

  ?

1
2
3
4
5
6
7

selectDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
// Toast.makeText(getBaseContext(), "点击了back", Toast.LENGTH_SHORT).show();
}
});

  这样就可以捕捉到back键的事件了,当按下back键时,系统默认的操作会让dialog cancel掉,此时会触发OnCancelListener,然后在onCancel方法里面就可以实现自己想要实现的操作了。

  2)设置dialog的setOnKeyListener并重写dispatchKeyEvent方法

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

selectDialog.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0)
{
dialog.dismiss();
}
return false;
}
});
public boolean dispatchKeyEvent(KeyEvent event)
{
switch(event.getKeyCode())
{
case KeyEvent.KEYCODE_BACK:
Toast.makeText(getBaseContext(), "点击了back", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.dispatchKeyEvent(event);
}

  然后在dispatchKeyEvent里面就可以实现自己想要实现的操作了。

  希望本文所述对大家的Android程序设计有所帮助。

时间: 2024-12-04 02:13:22

Android解决dialog弹出时无法捕捉Activity的back事件的方法的相关文章

Android解决dialog弹出时无法捕捉Activity的back事件的方法_Android

本文实例讲述了Android解决dialog弹出时无法捕捉Activity的back事件的方法.分享给大家供大家参考.具体分析如下: 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件: 1)重写onKeyDown或者onKeyUp方法 2)重写onBackPressed方法 3)重写dispatchKeyEvent方法 这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料. 然而在有dialog弹出时,

Android 解决dialog弹出时无法捕捉Activity的back事件问题_Android

Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件: 1)重写onKeyDown或者onKeyUp方法 2)重写onBackPressed方法 3)重写dispatchKeyEvent方法 这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料. 然而在有dialog弹出时,想捕捉back键的事件的话,上述三种办法都无法实现.

Android软键盘弹出时的界面控制方法_Android

本文实例讲述了Android软键盘弹出时的界面控制方法.分享给大家供大家参考,具体如下: 有时候androidactivity弹出软键盘后布局改变 下面有三种模式可以改变软键盘弹出以后的显示形式 模式一:压缩模式软键盘弹出以后,会压缩原先的大小我们可以在AndroidManifet.xml中对Activity进行设置.如: android:windowSoftInputMode="stateUnchanged|adjustResize" 模式二:平移模式 软键盘弹出以后,不会压缩原先的

Android软键盘弹出时的界面控制方法

本文实例讲述了Android软键盘弹出时的界面控制方法.分享给大家供大家参考,具体如下: 有时候androidactivity弹出软键盘后布局改变 下面有三种模式可以改变软键盘弹出以后的显示形式 模式一:压缩模式软键盘弹出以后,会压缩原先的大小 我们可以在AndroidManifet.xml中对Activity进行设置.如: android:windowSoftInputMode="stateUnchanged|adjustResize" 模式二:平移模式 软键盘弹出以后,不会压缩原先

Android 软键盘弹出时把原来布局顶上去的解决方法

键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: <activity android:name=".filing.MainActivity" android:windowSoftInputMode="adjustResize|stateHidden" /> windowSoftInputMode 属性解释: 活动的主窗口如何与包含屏幕上的软键盘窗口交互.这个属性的设置将会影响两件事

android 自定义dialog弹出和消失动画

http://308210.blog.51cto.com/298210/703682 自定义dialog窗口,根据坐标可随意设置dialog显示位置,实现了窗口弹出动画   Java代码: package com.sunxu.org.IndividualityDialog; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.os.Bundle

Android 继承DialogFragment弹出dialog对话框

相信现在Android软件开发员,都经常用到这种方式弹出对话框的.Android继承DialogFragment弹出dialog对话框,这样弹出有很多可以灵活处理地方,想什么启动,什么时候数据接口返回都可以,有自已layout布局,生命周期.下面看看我写demo. 本文代码下载:请点击这里 转载请注明出处: http://blog.csdn.net/qq_16064871 一.MainActivity [java] view plaincopy package com.example.fragm

android dialog弹出速度慢 在平板横屏和竖屏下 反应速度不一样

问题描述 android dialog弹出速度慢 在平板横屏和竖屏下 反应速度不一样 在小米平板上进行开发,listview 的item布局中有删除按钮和详情按钮,我在adapter中写点击事件弹出提示是否删除,但是在平板横屏下反应没问题,很流畅.但切换成竖屏时就会偶尔有延迟,会卡顿. 解决方案 也可能和你的布局有关系,弹出时,会导致布局调整,由于布局布置不合理,导致调整布局时卡顿 解决方案二: 那为什么在横屏下是没问题呢? 解决方案三: public void onBackPressed()

Android WebView无法弹出软键盘的原因及解决办法_Android

requestFoucs();无效. requestFoucsFromTouch();无效. webview.setTouchListener:无效. 问题所在: 继承WebView时,注意构造方法: public CommonWebView(Context context) { super(context); init(); } public CommonWebView(Context context, AttributeSet attrs) { super(context, attrs);