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

<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);
        }
    }

}
 


### 回答1: 要在Android应用程序中实现退出提示的功能,您可以按照以下步骤操作: 1. 创建一个AlertDialog,其中包含退出提示信息两个按钮“是”“否”。 2. 在“是”按钮上注册一个单击监听器,以便在单击时关闭应用程序。在“否”按钮上注册一个单击监听器,以便在单击时关闭AlertDialog。 3. 在您的Activity的onBackPressed()方法中,弹出AlertDialog。 以下是一个示例代码,可以帮助您实现退出提示的功能: ``` @Override public void onBackPressed() { new AlertDialog.Builder(this) .setMessage("确定要退出应用吗?") .setPositiveButton("是", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }) .setNegativeButton("否", null) .show(); } ``` 通过这个示例,当用户按下返回时,将会弹出一个AlertDialog,询问用户是否要退出应用。如果用户单击“是”按钮,应用程序将关闭。如果用户单击“否”按钮,则AlertDialog将被关闭,用户将返回到应用程序。 ### 回答2: 在Android中,可以通过以下几种方法来实现退出提示的功能。 1. 使用AlertDialog:在退出按钮的点击事件中,创建一个AlertDialog对话框,设置标题提示内容,并添加“确定”“取消”两个按钮。在“确定”按钮的点击事件中调用finish()方法关闭当前Activity;在“取消”按钮的点击事件中调用dialog.dismiss()方法关闭对话框。 2. 使用Toast:在退出按钮的点击事件中,创建一个Toast,并设置显示时间为Toast.LENGTH_SHORT或Toast.LENGTH_LONG。通过调用show()方法来显示Toast提示消息。提示消息可以是“再按一次退出应用”或者其他自定义内容。同时,在Activity中重写onBackPressed()方法,在方法中设置Toast的内容,并使用一个计时器记录两次点击返回的时间间隔。如果两次点击的时间间隔小于一定的值,就关闭当前Activity,否则显示Toast提示消息。 3. 使用双击退出:在Activity的onBackPressed()方法中,使用一个计时器来记录两次点击返回的时间间隔。如果两次点击的时间间隔小于一定的值,就关闭当前Activity,并返回true;否则返回false。在Activity的onCreate()方法中设置计时器的初始值为0,在计时器完成后将其重置为0。 无论采用哪种方法,都需要在Activity的布局文件中添加退出按钮,并在对应的Activity中找到该按钮,并设置点击事件。对于前两种方法,需要在Activity类中重写onBackPressed()方法,对返回点击进行处理。 ### 回答3: 在Android中实现退出提示的功能,可以通过以下步骤来完成: 1. 在Android Studio中创建一个新的项目或打开一个已有的项目。 2. 在项目的布局文件中,添加一个显示退出提示的对话框。可以使用AlertDialog来实现,设置对话框的标题、消息、确定按钮取消按钮等内容。 3. 在Java代码中,找到退出应用的地方,一般为用户点击返回按钮或者点击退出按钮等操作。在这个地方添加一个弹出退出对话框的逻辑。 4. 在弹出退出对话框的逻辑中,设置点击确定按钮时退出应用的操作。可以使用System.exit(0)来立即退出应用,也可以通过finish()来关闭当前活动。 5. 设置点击取消按钮时对话框消失,用户取消退出应用。 6. 运行应用,在需要退出的地方点击返回按钮或者点击退出按钮时,会弹出退出提示的对话框。用户可以选择确定退出应用或者取消退出。 如此,就可以在Android应用中实现退出提示的功能了。这样,当用户想要退出应用时,会有一个确认的提示,避免误操作。同时,对话框的样式内容可以根据实际需求进行自定义,提升用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值