目錄結構:
contents structure
[+]
一.簡介
本篇文章介紹如何在Android中實現監聽返回鍵,主鍵,菜單鍵。一般情況下,我們都可以在Android手機底部看到三個按鈕,這三個按鈕就分別是返回鍵,主鍵,菜單鍵。
接下來介紹監聽這三個鍵的實現。
二.監聽 返回鍵
第一種方法通過onBackPressed()方法來實現
/** * 注意: * super.onBackPressed()會自動調用finish()方法,關閉當前Activity. */ @Override public void onBackPressed() { super.onBackPressed(); Toast.makeText(this, "按下了back鍵 onBackPressed()", Toast.LENGTH_SHORT).show(); }
onBackPressed()提供的功能有限,它這是在退出之前通知onBackPressed()方法,並不能改變用戶原來的行為
利用onKeyDown方法,就可以實現
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Toast.makeText(this, "按下了back鍵 onKeyDown()", Toast.LENGTH_SHORT).show(); return false; }else { return super.onKeyDown(keyCode, event); } }
onKeyDown方法返回true表示退出,返回false便不退出。
還可以通過跳轉來實現退出,
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); } return super.onKeyDown(keyCode, event); }
通過onKeyDown我們可以實現,實現“再按一次返回鍵退出程序”的功能
private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) > 2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event); }
三.監聽 主鍵(Home鍵)
監聽Home鍵可以通過onUserLeaveHint()方法來實現,
@Override protected void onUserLeaveHint() { super.onUserLeaveHint(); Toast.makeText(this, "onUserLeaveHint", Toast.LENGTH_SHORT).show(); }
在這個方法中,我們可以觀察出,如果onUserLeaveHint方法是不能改變用戶的行為的。
四.監聽 菜單鍵
在手機下方的三個鍵中,最右邊的鍵就是菜單鍵,通常是用方括號表示的。經過筆者的測試發現,如果輕點一下,那么會跳出菜單界面,如果長點的話,那么會退出程序。這個過程會自動調用onUserLeaveHint方法,也就是主鍵。
菜單的監聽也可以通過onKeyDown()方法來實現
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { Toast.makeText(this, "onkeyDown clicked", Toast.LENGTH_SHORT) .show(); super.openOptionsMenu(); // 調用這個,就可以彈出菜單 } return true; // 最后,一定要做完以后返回 true,或者在彈出菜單后返回true,其他鍵返回super,讓其他鍵默認 }
處理上面這樣的方法,onOptionsMenuClosed()方法也可以實現。
@Override public void onOptionsMenuClosed(Menu menu) { super.onOptionsMenuClosed(menu); Toast.makeText(this, "onOptionsMenuClosed clicked", Toast.LENGTH_SHORT) .show(); }
經過筆者的測試,發生這些方法在高版本中可能出現不兼容的情況,關於菜單可以查看 Android中Menu菜單