1.选项菜单(OptionsMenu):
Options Menu是在单击Menu菜单键的时候弹出的菜单
public boolean onCreateOptionsMenu(Menu menu):首次显示的时候调用
public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。
public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
public boolean onPrepareOptionsMenu(Menu menu):每次显示前调用
public boolean onMenuOpened(int featureId, Menu menu):菜单打开后发生的动作。可以在这里Disable/enable某个菜单项
代码创建子菜单项:
public boolean onCreateOptionsMenu(Menu menu) { 3 // TODO Auto-generated method stub 4 menu.add(1, 1, 1, "设置"); 5 return super.onCreateOptionsMenu(menu); 6 } 7 @Override 8 public boolean onMenuItemSelected(int featureId, MenuItem item) { 9 // TODO Auto-generated method stub 10 if(item.getItemId() == 1){ 11 finish(); 12 } 13 return super.onMenuItemSelected(featureId, item); 14 }
xml创建子菜单项:
这里我在res/menu/中定义自己的Menu的xml文件mymenu.xml:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/about" android:icon="@drawable/about" android:title="关于"/> <item android:id="@+id/exit" android:icon="@drawable/exit" android:title="退出"/> </menu>
然后在Activity中的onCreateOptionsMenu()回调函数中生成这个Menu:
public class ShowMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } /** * 这个方法只会调用一次,这个Menu会被反复调用 */ @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mymenu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId) { case R.id.about: Toast.makeText(this, "这是个OptionsMenu测试", Toast.LENGTH_LONG).show(); return true; case R.id.exit: finish(); return true; } return super.onOptionsItemSelected(item); } }
2.上下文菜单(ContextMenu)
长按一个组件的时候弹出来的菜单,Options Menu的Item可以添加图标和快捷键,而Context Menu则不能
1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add()方法添加菜单选项
//上下文才菜单(Context Menu),当用户长时间按键不放弹出的菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, 0, 0, "contextMenu");
menu.add(0, 1, 0, "contextMenu1");
menu.add(0, 2, 0, "contextMenu2");
}
2、覆盖onContextItemSelected()方法,响应菜单事件
//选择上下文菜单之后触发的事件
@Override
public boolean onContextItemSelected(MenuItem item) {
System.out.println(item.getItemId());
switch(item.getItemId()){
case 0:
Toast.makeText(getApplicationContext(), "case 0", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(getApplicationContext(), "case 1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(getApplicationContext(), "case 2", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
3、调用Activity的registerForContextMenu()方法,为视图注册上下文菜单
TextView textView = (TextView)findViewById(R.id.textView);
registerForContextMenu(textView);
备注:一定要有可以注册的控件,然后用户一直按着这个控件,就会弹出ContextMenu的内容
创建菜单也可以用menu中的xml定义(不能有图标和快捷键),其他一样