点击返回键:弹出退出的对话框和双击两次返回键,退出

来源:互联网 发布:中国移动免流量软件 编辑:程序博客网 时间:2024/06/06 01:46

<1>点击返回键:弹出退出的对话框

package com.zking.administrator.app2;import android.app.AlertDialog;import android.content.DialogInterface;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.KeyEvent;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event)    {        if (keyCode == KeyEvent.KEYCODE_BACK )        {            // 创建退出对话框            AlertDialog isExit = new AlertDialog.Builder(this).create();            // 设置对话框标题            isExit.setTitle("系统提示");            // 设置对话框消息            isExit.setMessage("确定要退出吗");            // 添加选择按钮并注册监听            isExit.setButton("确定", listener);            isExit.setButton2("取消", listener);            // 显示对话框            isExit.show();        }        return false;    }    /**监听对话框里面的button点击事件*/    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener()    {        public void onClick(DialogInterface dialog, int which)        {            switch (which)            {                case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序                    finish();                    break;                case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框                    break;                default:                    break;            }        }    };}

<2>双击两次返回键,退出

第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。
在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为true,则会执行退出的方法。

package com.zking.administrator.app2;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.KeyEvent;import android.widget.Toast;/** * Created by Administrator on 2017/6/17. */public class HHActivity extends Activity{    // 定义一个变量,来标识是否退出    private static boolean isExit = false;    Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            isExit = false;        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_hh);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent            event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            exit();            return false;        }        return super.onKeyDown(keyCode, event);    }    private void exit() {        if (!isExit) {            isExit = true;            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            // 利用handler延迟发送更改状态信息            mHandler.sendEmptyMessageDelayed(0, 2000);        } else {            finish();            System.exit(0);        }    }}第二种实现方式,通过记录按键时间计算时间差实现:
package com.gaolei.exitdemo;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.widget.Toast;public class MainActivity extends Activity {    private long exitTime = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            exit();            return false;        }        return super.onKeyDown(keyCode, event);    }    public void exit() {        if ((System.currentTimeMillis() - exitTime) > 2000) {            Toast.makeText(getApplicationContext(), "再按一次退出程序",                    Toast.LENGTH_SHORT).show();            exitTime = System.currentTimeMillis();        } else {            finish();            System.exit(0);        }    }}
 

原创粉丝点击