1. 程式人生 > >Android常用之返回按鍵監聽

Android常用之返回按鍵監聽

在安卓開發中,我們經常要對按鍵進行監聽,今天跟大家分享一下最常用的按下返回退出功能的實現.
如果沒有對返回鍵設定監聽,通常按下一次返回鍵就會退出程式或退出某個介面,這樣是很不人性化的,我們可以有兩種處理方式:

  • 按下返回鍵時彈出一個對話方塊(AlertDialog),再讓使用者選擇是否退出
  • 雙擊返回退出

下面分別介紹著兩種實現方式

1. 按下返回鍵時彈出一個對話方塊(AlertDialog),再讓使用者選擇是否退出

實現思路:

  • 重寫onKeyDown方法
  • 在方法中,判斷返回按鍵被按下的時候建立一個對話方塊並顯示
  • 給對話方塊的按鈕設定點選監聽

程式碼示例:

//重寫onKeyDown方法,對按鍵(不一定是返回按鍵)監聽
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {//當返回按鍵被按下 AlertDialog.Builder dialog = new AlertDialog.Builder(context);//新建一個對話方塊 dialog.setMessage("確定要退出測試嗎?");//設定提示資訊 //設定確定按鈕並監聽 dialog.setPositiveButton("確定"
, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish();//結束當前Activity } }); //設定取消按鈕並監聽 dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) { //這裡什麼也不用做 } }); dialog.show();//最後不要忘記把對話方塊顯示出來 } return false; }

這樣,就實現了點選返回按鍵時彈出對話方塊,並交由使用者處理退出的功能

2.雙擊返回退出

實現思路:

  • 重寫onKeyDown方法
  • 宣告一個全域性的布林值isExit,預設為false
  • 第一次點選返回按鍵時,彈出Toast提示,並呼叫exit()方法
  • exit()方法中,判斷isExit值,並執行相應邏輯(具體看程式碼吧,原諒我真不知道怎麼描述了……)

程式碼示例:

//宣告一個全域性布林值,預設為false
public boolean isExit = false;

//重寫onKeyDown方法,
public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {//當返回按鍵被按下
        //呼叫exit()方法
        exit();
        }
        return false;
    }

//被呼叫的exit()方法
private void exit() {
        Timer timer;//宣告一個定時器
        if (!isexit) {  //如果isExit為false,執行下面程式碼
            isexit = true;  //改變值為true
            Toast.makeText(TestActivity.this, "再按一次退出測試", Toast.LENGTH_SHORT).show();  //彈出提示
            timer = new Timer();  //得到定時器物件
            //執行定時任務,兩秒內如果沒有再次按下,把isExit值恢復為false,再次按下返回鍵時依然會進入if這段程式碼
            timer.schedule(new TimerTask() {  
                @Override
                public void run() {
                    isexit = false;
                }
            }, 2000);
        } else {//如果兩秒內再次按下了返回鍵,這時isExit的值已經在第一次按下時賦值為true了,因此不會進入if後的程式碼,直接執行下面的程式碼
            finish();
        }
    }

嗯,就這樣,雙擊退出的功能也實現了,如果看不懂,建議大家自己寫一遍就能明白邏輯了.