在我的應用程序中,我只有一個活動,我正在使用ViewAnimator
來更改屏幕。對於菜單和返回鍵,我試圖暫停活動(如主頁鍵),並顯示菜單或返回到前面的View
。Android在後臺和菜單鍵上暫停活動
憤怒的小鳥也這麼認爲(憤怒的小鳥里約做的和我想要的完全一樣)。
我也檢查了OnKeyDown
事件以瞭解Home鍵的工作方式,但我認爲它是由系統處理的。
謝謝。
在我的應用程序中,我只有一個活動,我正在使用ViewAnimator
來更改屏幕。對於菜單和返回鍵,我試圖暫停活動(如主頁鍵),並顯示菜單或返回到前面的View
。Android在後臺和菜單鍵上暫停活動
憤怒的小鳥也這麼認爲(憤怒的小鳥里約做的和我想要的完全一樣)。
我也檢查了OnKeyDown
事件以瞭解Home鍵的工作方式,但我認爲它是由系統處理的。
謝謝。
爲了趕菜單鍵:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//return true to show some menu
//return false to not show any 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
如果用戶想要退出應用程序(如果該應用程序凍結或某物),則無法覆蓋主鍵。這將是他們離開的唯一途徑。但是主鍵會暫停活動,例如在動畫的中間按Home鍵並再次切換到應用程序,動畫繼續按住Home鍵。
主鍵永遠不會被應用程序事件處理程序直接困住,有辦法檢測到它發生了一些小工作,請參閱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!");
}
我不想覆蓋Home鍵我想覆蓋Back和Menu鍵。就這些。 –
不夠公平,您可能希望更改標題以排除主鍵,然後說「返回鍵」,您還會說「我也檢查了OnKeyDown事件以瞭解Home鍵的工作方式,但我認爲它是由系統「 – Idistic
當我正確地得到你的問題,你不想改變主頁按鈕的行爲,對不對?
要處理的背部和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
ups..didn't see pandres answer ... 仍然,它有點不同:) – jpm
是的,我知道'onKeyUp'事件,但是如何暫停活動或者是否應該暫停處理每個項目,例如暫停動畫和禁用不必要的按鈕。 –
暫停應用程序的邏輯取決於您。但是你可以顯示AlertDialog最多三個按鈕和/或任何你想要的視圖:http://developer.android.com/reference/android/app/AlertDialog.html – pandre
你可以在API 5之後使用onBackPressed()。 – Rob