淺談android設備返回鍵onBackPressed、onKeyDown與dispatchKeyEvent

最近在開發中遇到一個問題就是當有時按下android手機的物理返回鍵時跳轉的不是本身想要的頁面,因此決定重寫下android的手機返回鍵。因此當時就用了onBackPressed,結果很差用因而改onKeyDown仍是沒法調用該方法。後來發現原來我用的是avtivityGroup而不是activity,因而改爲dispatchKeyEvent終於解決了問題。好了我來總結下:

1.onBackPressed

@Override
public void onBackPressed() {
// 這裏處理邏輯代碼,你們注意:該方法僅適用於2.0或更新版的sdk
return;
}

這是android2.0以後出的(其實如今不多再去考慮2.0以前的版本了)能夠直接在activity中捕獲android的返回鍵,(但貌似只有activity中能夠觸發,activityGroup,listActivity,tabActivity好像很差用)android

2.onKeyDown

public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
        {
     這裏寫本身的操做,此方法兼容Android 1.0到Android 2.1
 }
    }

此方法兼容Android 1.0到Android 2.1 也能夠直接在activity中捕獲android的返回鍵,(但同onBackPressed同樣,貌似只有activity中能夠觸發,activityGroup,listActivity,tabActivity好像很差用)ide

3.dispatchKeyEvent

@Override
    public boolean dispatchKeyEvent(KeyEvent event) 
    {
       if (event.getKeyCode() == KeyEvent.KEYCODE_BACK &&  event.getAction()==KeyEvent.ACTION_DOWN){
    //本身的操做            
           return false;
     }          
     return super.dispatchKeyEvent(event);
    }

當鍵盤按下時
首先觸發dispatchKeyEvent
而後觸發onUserInteraction
再次onKeyDown
若是按下緊接着鬆開,則是倆步
緊跟着觸發dispatchKeyEvent
而後觸發onUserInteraction
再次onKeyUp
因此dispatchKeyEvent只是監控案件無論是activity仍是activitygroup都會觸發。spa


監聽androi物理返回鍵的方法固然還有不少,以上只是我的看法,經驗不足,歡迎多多指教。code

相關文章
相關標籤/搜索