`

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

 
阅读更多

转于:http://www.cnblogs.com/dolphin0520/p/3414128.html

 

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

 

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

  1)重写onKeyDown或者onKeyUp方法

  2)重写onBackPressed方法

  3)重写dispatchKeyEvent方法

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

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

  1)设置dialog的setOnCancelListener监听:

复制代码
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方法

复制代码
  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 解决dialog弹出时无法捕捉Activity的back事件问题

    Android 如何解决dialog弹出时无法捕捉Activity的back事件  在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件:  1)重写onKeyDown...

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

    这两种方法都能够解决在dialog显示时无法捕获Activity的back事件的问题。选择哪种方法取决于你的具体需求。如果你只想在dialog关闭时执行某些操作,那么`OnCancelListener`可能更合适。而如果你需要在用户按下back键...

    Android 利用dialog弹出 二级下拉列表 ExpandableListView+DialogLI

    Android 利用dialog弹出 二级下拉列表 ExpandableListView+DialogLI。 利用dialog和ExpandableListView实现的一个弹出二级菜单项,并进行了封装,可在activity和fragment中随意调用。简单实用,兼容性好。 二级列表

    各种android弹出dialog效果以及各种dialog样式

    各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...

    Android 底部弹出dialog+动画

    在Android开发中,底部弹出Dialog是一种常见的交互方式,它用于显示临时信息或者提供用户一些简短的操作选项。本文将详细讲解如何实现一个带有动画效果的底部弹出Dialog,并通过具体的代码实例进行演示。 首先,...

    Android使用Activity用作弹出式对话框

    在Android开发中,有时我们需要创建一个弹出式对话框来与用户进行交互,但不同于常见的`Dialog`类,我们可以利用`Activity`来实现这一功能。这种方式适用于需要更复杂交互或者自定义布局的情况。本文将详细讲解如何...

    完美实现将activity作为dialog弹窗进行弹出

    本文将深入探讨如何完美实现将Activity作为Dialog弹窗进行弹出,并且兼顾到既能作为Dialog,也能作为普通Activity正常使用的情况。 首先,我们需要在AndroidManifest.xml中对目标Activity进行配置。添加`android:...

    android 全屏弹出dialog,底部弹入,底部弹出+弹出dialog输入法

    本文将详细介绍如何实现一个全屏弹出的Dialog,并且重点讨论如何实现底部弹入和底部弹出的效果,以及如何处理Dialog与输入法的交互。这个功能在很多应用场景中都非常有用,比如在登录、注册或者评论等场景,用户可能...

    Android dialog的显示位置、弹出效果、返回键控制、外部点击事件控制功能点集合

    本篇文章将详细探讨如何实现Android Dialog的显示位置控制、弹出效果定制、返回键处理以及外部点击事件的管理。 首先,让我们关注Dialog的显示位置。在Android中,Dialog通常会居中显示,但有时我们可能需要自定义...

    Android中使用Dialog风格弹出框的Activity

    android:name=".DialogActivity" android:theme="@style/Theme.AppCompat.Dialog"> </activity> ``` 接下来,我们来创建`DialogActivity`。在`DialogActivity`的布局文件中,应保持简洁,避免使用太大的视图元素...

    各种Android Dialog创建及其监听事件实现

    在Android开发中 我们经常会需要在Android界面上弹出一些对话框 比如询问用户或者让用户选择 关于Android Dialog的使用方法 已经有很多blog做出了详细的介绍(比如博客:7种形式的Android Dialog使用举例) 但是只是...

    使用Dialog实现从页面顶部弹出类似搜索的对话框

    此外,如果你希望这个搜索Dialog在点击某个按钮或者触发特定事件时出现,而不是在Activity启动时立即显示,可以在适当的地方调用`showDialog(DIALOG_SEARCH)`方法,其中`DIALOG_SEARCH`是你在`onCreateDialog()`中...

    Android-Android开发启动app弹出一张广告图片Dialog可以查看大图查看某个图片功能

    本文将深入探讨如何实现“Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能”。这个过程涉及到多个关键知识点,包括自定义Dialog、图片加载库的使用以及图片查看器的实现。 首先,我们要...

    Android Dialog风格的Activity

    android:name=".DialogActivity" android:theme="@style/Theme.AppCompat.Light.Dialog"> </activity> ``` 接下来,你需要在`DialogActivity`的布局文件中设计对话框的界面。布局通常包含简单的元素,如TextView...

    android-dialog弹出框,弹出gridview条目选中.rar

    本示例“android-dialog弹出框,弹出gridview条目选中”是一个实现自定义Dialog并集成GridView来展示可选条目的实践案例。下面我们将深入探讨这一主题。 首先,`Dialog`是Android提供的一个类,用于显示一个浮动...

    一个类实现Android弹出dialog,调用相册,相机截图功能

    在Android开发中,创建一个能够弹出Dialog并提供调用相册、相机以及截图功能的类是一项常见的需求。这样的功能可以极大地提升用户交互体验,让用户能够方便快捷地选择图片资源或者进行屏幕截图。以下我们将详细探讨...

    Android弹出dialog后无法捕捉back键的解决方法

    本文将详细介绍如何解决Android弹出Dialog后无法捕捉Back键的问题。 首先,我们需要理解问题出现的原因。当一个Dialog被显示时,它会获取到当前Activity的焦点,这意味着系统会将输入事件(如按键事件)优先传递给...

    Android 控制关闭Dialog

    在Android开发中,Dialog是一种常见的用户交互元素,用于在用户界面中显示临时信息或进行简单的交互操作。通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动...

Global site tag (gtag.js) - Google Analytics