2011-07-28 6 views
0

私のアプリケーションでは1つのアクティビティしかなく、画面を変更するのにViewAnimatorを使用しています。メニューとバックキーについては、アクティビティを一時停止(ホームキーのように)し、メニューを表示するか、前のViewに戻そうとしています。Androidは、戻るキーとメニューキーのアクティビティを一時停止します

怒っている鳥は同じ考えをしています(Angry Birds Rioはまったく同じことをやりたいと思います)。

私はOnKeyDownイベントをチェックして、ホームキーの仕組みを調べましたが、システムによって処理されていると思います。

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 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#onCreateOptionsMenu(android.view.Menu

のIr順http://developer.android.com/reference/android/app/Activity.html#onKeyUp(int、android.view.KeyEvent)

EDIT: アプリケーションのロジックを一時停止するのはあなた次第です。しかし、最大3つのボタンや任意のビューでAlertDialogを表示することができます。http://developer.android.com/reference/android/app/AlertDialog.html

+0

はい、私は' onKeyUp'イベントを知っていますが、私はそのアクティビティを一時停止することができますか、アニメーションを一時停止し、不要なボタンを無効にするなど、 –

+0

アプリケーションのロジックを一時停止するのはあなた次第です。しかし、最大3つのボタンや任意のビューでAlertDialogを表示することができます。http://developer.android.com/reference/android/app/AlertDialog.html – pandre

+0

API 5の後にonBackPressed()を使用できます。 – Rob

0

凍った場合など、ユーザーがアプリを終了したい場合は、ホームキーを無効にすることはできません。それが彼らを去る唯一の道になるだろう。しかし、ホームキーはアクティビティを一時停止する。アニメーションプレスのホームキーの途中でもう一度アプリに切り替えると、ホームキーを押した場所でアニメーションが続行されます。

0

ホーム・キーは、アプリケーション・イベント・ハンドラに直接トラップされることはありません。ちょっとしたことで起こったことを検出する方法があります。onUserLeaveHintメイン・アイデアを参照し、次にonUserInteractionを参照してホーム・キーかどうかを確認してください。

あなたの意図が正確ではありません。それがすべて答えたいのであれば、私は少し不明です。

あなたのアプリケーションによっては、これを他の状態管理と組み合わせる必要があるかもしれませんが、非常に単純なアプリケーションではほとんどの場合動作します。もっとここに

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

読む:それは、メニューキーをキャッチするために

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

ホームキーを上書きしたくありません。戻るキーとメニューキーをオーバーライドします。それはすべてです。 –

+0

あなたは、ホームキーを除外するようにタイトルを変更し、代わりに "Back Key"と言うこともできます。また、 "OnKeyDownイベントをチェックしてHomeキーの仕組みを調べましたが、システム " – Idistic

0

質問が正しく表示されたら、ホームボタンの動作を変更する必要はありませんか?あなたはこのようにonKeyDownコールバックを使用することができますバックと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); 
} 

とにかくメニューを表示する。 (この方法が正確に呼び出されたときにドキュメントをチェックする必要がありますが) あなたは代わりにそのためonMenuOpendコールバックを使用することができます。

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

・ホープ、このことができます... jpm

+0

アップ... pandresの答えを参照してください... まだ、それは少し異なります:) – jpm

関連する問題