zoukankan      html  css  js  c++  java
  • Android popupwindow和dialog监听返回键

    使用情况: 
    在activity中,出现了popupwindow和dialog,这个时候,如果点击返回键,它们消失了,但是一些操作还在继续。如:1、进行耗时操作,出现dialog提醒用户等待,这时,按下返回键,dialog消失,但是,耗时操作还在继续。这是因为,dialog拦截了返回键,消费了它,让自己消失,但是其他进程还在继续。2、一个activity(A),start了新activity(B),B要展示一个popupwindow,这时,按下返回键,popupwindow消失了,但是B还在。我要的效果是:按下返回键,popupwindow消失,B做finish 
    代码讲解: 
    1、popupwindow 
    需要导包

    import android.view.View.OnKeyListener;

    View popupWindowView = LayoutInflater.from(context).inflate(R.layout.select_layout, null);
            popupWindow = new PopupWindow(popupWindowView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            popupWindow.setAnimationStyle(R.style.SelectAnimationShow);
    
            // 菜单背景色
            ColorDrawable dw = new ColorDrawable(0x00ffffff);
            popupWindow.setBackgroundDrawable(dw);
            popupWindow.showAtLocation(LayoutInflater.from(context).inflate(R.layout.select_activity_layout, null),
                    Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
    
            popupWindow.setFocusable(true);
    
            popupWindowView.setFocusable(true);
            popupWindowView.setFocusableInTouchMode(true);
            popupWindowView.setOnKeyListener(new OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    //do something...
                    return true;
                }
            });

    **注:**PopupWindow的构造函数,一定,一定要用上面写的那种,其他的,没效果或者出错。原因不清楚。 
    这样写了以后,出现popupwindow时,点击返回键,popupwindow消失,activity-B也会走到onDestroy()这个生命周期

    2、dialog

    DialogInterface.OnKeyListener keylistener = new DialogInterface.OnKeyListener(){
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0)
                {
                    //do something...
                    return false;
                }
                else
                {
                    return true;
                }
            }
        } ;

    最后

    mWaitingDialog.setOnKeyListener(keylistener);
  • 相关阅读:
    sql server版本、组件和管理工具
    asp.net WebService如何去掉asmx后缀
    通过C#发送自定义的html格式邮件
    asp.net上传图片到服务器
    分享一个C#自定义事件的实际应用
    推荐一个ASP.NET网站内容管理系统源码
    asp.net读取模版并写入文本文件
    Win10命令提示符(cmd)怎么复制粘贴
    配置IIS的通配符应用程序映射
    用c-free 5写一个入门的程序
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7942652.html
Copyright © 2011-2022 走看看