2011-07-28 49 views
0

在我的應用程序中,我只有一個活動,我正在使用ViewAnimator來更改屏幕。對於菜單和返回鍵,我試圖暫停活動(如主頁鍵),並顯示菜單或返回到前面的ViewAndroid在後臺和菜單鍵上暫停活動

憤怒的小鳥也這麼認爲(憤怒的小鳥里約做的和我想要的完全一樣)。

我也檢查了OnKeyDown事件以瞭解Home鍵的工作方式,但我認爲它是由系統處理的。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/app/Activity.java#Activity.onKeyDown%28int%2Candroid.view.KeyEvent%29

謝謝。

回答

4

爲了趕菜單鍵:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    //return true to show some menu 
    //return false to not show any menu 
} 

在這裏閱讀更多: http://developer.android.com/reference/android/app/Activity.html#onCreateOptionsMenu(android.view.Menu

銥爲了趕返回鍵事件:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     //do your stuff and Return true to prevent this event from being propagated further 
     return true; 
    } 

    return false; 
} 

在這裏閱讀更多:http://developer.android.com/reference/android/app/Activity.html#onKeyUp(int,android.view.KeyEvent)

編輯: 暫停你的應用程序的邏輯取決於你。但你可以顯示一個AlertDialog最多三個按鈕和/或任何你想要的視圖:http://developer.android.com/reference/android/app/AlertDialog.html

+0

是的,我知道'onKeyUp'事件,但是如何暫停活動或者是否應該暫停處理每個項目,例如暫停動畫和禁用不必要的按鈕。 –

+0

暫停應用程序的邏輯取決於您。但是你可以顯示AlertDialog最多三個按鈕和/或任何你想要的視圖:http://developer.android.com/reference/android/app/AlertDialog.html – pandre

+0

你可以在API 5之後使用onBackPressed()。 – Rob

0

如果用戶想要退出應用程序(如果該應用程序凍結或某物),則無法覆蓋主鍵。這將是他們離開的唯一途徑。但是主鍵會暫停活動,例如在動畫的中間按Home鍵並再次切換到應用程序,動畫繼續按住Home鍵。

0

主鍵永遠不會被應用程序事件處理程序直接困住,有辦法檢測到它發生了一些小工作,請參閱onUserLeaveHint作爲主要思想,然後onUserInteraction嘗試並確定它是否是主鍵。

不確定你的意圖是什麼,我有點不清楚,如果這就是你想要的答案。

無論如何,依賴於您的應用程序,您可能需要將其與其他一些狀態管理結合使用,但對於非常簡單的應用程序而言,它大部分時間都可用。我只用它來分析的,但它可能只是通過它的情況下,爲你工作,我在外面確實

long userInteractionTime = 0; 

@Override 
public void onUserInteraction() { 
    userInteractionTime = System.currentTimeMillis(); 
    super.onUserInteraction(); 
} 

@Override 
public void onUserLeaveHint() { 
    long uiDelta = (System.currentTimeMillis() - userInteractionTime); 

    super.onUserLeaveHint(); 
    Log.i("bThere","Last User Interaction = "+uiLag); 
    if (uiDelta < 100) 
     Log.i("appname","Home Key Pressed");  
    else 
     Log.i("appname","Leaving activity for some other reason!"); 
} 
+0

我不想覆蓋Home鍵我想覆蓋Back和Menu鍵。就這些。 –

+0

不夠公平,您可能希望更改標題以排除主鍵,然後說「返回鍵」,您還會說「我也檢查了OnKeyDown事件以瞭解Home鍵的工作方式,但我認爲它是由系統「 – Idistic

0

當我正確地得到你的問題,你不想改變主頁按鈕的行爲,對不對?

要處理的背部和menuKey可以使用的onkeydown回調是這樣的:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK){ 
     //DO STUFF 
     return true; 
    } 
      //else if(keyCode == KeyEvent.KEYCODE_MENU){ 
      //  //DO OTHER STUFF 
      //  return false; // I think it's better to use the onMenuOpenCallback 
      //  for that... 
      //} 

    return super.onKeyDown(keyCode, event); 
} 

有關菜單按鈕,您也可以使用的onkeydown回調,但我認爲這不是最好的辦法,因爲你想無論如何顯示一個菜單。 可以使用onMenuOpend回調,與其(雖然你應該檢查文檔時,這種方法恰好叫):

@Override 
public boolean onMenuOpened(int featureId, Menu menu) { 
      //DO STUFF 
      return true; 
    } 

希望這有助於... jpm

+0

ups..didn't see pandres answer ... 仍然,它有點不同:) – jpm