Android常用之返回按鍵監聽
阿新 • • 發佈:2019-02-18
在安卓開發中,我們經常要對按鍵進行監聽,今天跟大家分享一下最常用的按下返回退出功能的實現.
如果沒有對返回鍵設定監聽,通常按下一次返回鍵就會退出程式或退出某個介面,這樣是很不人性化的,我們可以有兩種處理方式:
- 按下返回鍵時彈出一個對話方塊(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();
}
}
嗯,就這樣,雙擊退出的功能也實現了,如果看不懂,建議大家自己寫一遍就能明白邏輯了.