0

在我的应用程序中,我只有一个活动,我正在使用它ViewAnimator来更改屏幕。对于菜单和返回键,我试图暂停活动(就像 home 键一样)并显示菜单或返回上一个View

愤怒的小鸟也有同样的想法(愤怒的小鸟里约热内卢做我想要的完全一样的事情)。

我还检查了该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

4 回答 4

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

于 2011-07-28T17:05:18.680 回答
0

如果用户想在应用程序冻结或其他情况下退出应用程序,则您不能覆盖主页键。这将是他们离开的唯一途径。但是主页键会暂停活动,例如在动画中间按下主页键并再次切换到应用程序,动画会在您按下主页键的位置继续。

于 2011-07-28T16:31:26.887 回答
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!");  
}
于 2011-07-28T16:40:21.990 回答
0

当我正确回答您的问题时,您不想更改主页按钮的行为,对吗?

要处理 back 和 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

于 2011-07-28T17:28:06.973 回答