在Activity 中创建Menu菜单的基本步奏方法很简单:重写Activity onCreateOptionsMenu(Menu menu) 方法载入布局文件,并且返回true(注意:必须的返回true,否则系统不知道你是否需要创建Menu菜单),然后在 onOptionsItemSelected(MenuItem item) 监听执行即可。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.d(TAG, "into onCreateOptionsMenu()");
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.d(TAG, "into onOptionsItemSelected()");
switch (item.getItemId()) {
case R.id.menu_normal:
if(playMode==PlayMode.NORMAL){
return true;
}
playMode = PlayMode.NORMAL;
changePlayMode(playMode);
timerView.stopTimer();
return true;
case R.id.menu_time:
if(playMode==PlayMode.TIME){
return true;
}
playMode =PlayMode.TIME;
changePlayMode(playMode);
return true;
case R.id.menu_set:
WSDialog.getInstance(this).createMutilDialog();
return true;
case R.id.menu_net_play:
goUsersListActivity();
return true;
}
return super.onOptionsItemSelected(item);
}
但是,有时候会出现Menu菜单显示不了的情况,目前自己发现的原因有两个,希望大家多多指教:
1.如上所说,在onCreateOptionsMenu(Menu menu) 没有返回true
2.Activity重写onKeyDown()方法监听按键响应;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK&& event.getAction() == KeyEvent.ACTION_DOWN) {
Log.d(TAG, "into onKeyDown()");
//应用程序退出,发出下线通知
netThreadHelper.noticeOffline();
netThreadHelper.disconnectSocket();
this.finish();
System.exit(0);
Log.d(TAG, "out onKeyDown()");
return true;
}
return true;
}
方法返回true,系统就不会处理Menu 按键,自然就会没有反应。
所以,根据android事件处理机制,应该调用系统的方法,将红色部分代码改为:
return super.onKeyDown(keyCode, event);即可