在我的应用程序中,我只有一个活动,我正在使用它ViewAnimator
来更改屏幕。对于菜单和返回键,我试图暂停活动(就像 home 键一样)并显示菜单或返回上一个View
。
愤怒的小鸟也有同样的想法(愤怒的小鸟里约热内卢做我想要的完全一样的事情)。
我还检查了该OnKeyDown
事件以了解 Home 键的工作方式,但我认为它是由系统处理的。
谢谢。
在我的应用程序中,我只有一个活动,我正在使用它ViewAnimator
来更改屏幕。对于菜单和返回键,我试图暂停活动(就像 home 键一样)并显示菜单或返回上一个View
。
愤怒的小鸟也有同样的想法(愤怒的小鸟里约热内卢做我想要的完全一样的事情)。
我还检查了该OnKeyDown
事件以了解 Home 键的工作方式,但我认为它是由系统处理的。
谢谢。
为了抓住菜单键:
@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
如果用户想在应用程序冻结或其他情况下退出应用程序,则您不能覆盖主页键。这将是他们离开的唯一途径。但是主页键会暂停活动,例如在动画中间按下主页键并再次切换到应用程序,动画会在您按下主页键的位置继续。
主键永远不会被应用程序事件处理程序直接捕获,有一种方法可以检测到它是否发生,请参阅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!");
}
当我正确回答您的问题时,您不想更改主页按钮的行为,对吗?
要处理 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