定制Memu
1.菜单的生成
对一个Android应用中的每一个屏幕,也就是说,对每一个Activity类,都会拥有一个默认菜单。
在Activity类中,定义了几个与菜单有关的方法,
供继承于Activity类的子类去重载,从而定制我们自己的菜单。这几个方法为:
public boolean onCreateOptionsMenu(android.view.Menu menu);
public boolean onPrepareOptionsMenu(android.view.Menu menu);
public boolean onOptionsItemSelected(android.view.MenuItem item);
为了生成我们自己的菜单,Android为我们提供了两个时机点。
当在Activity类实例启动时,我们可以通过重载onCreateOptionsMenu()来定制我们的菜单;
也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu来实现。
对于第二种方式,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//menu.add(groupId, itemId, order, title);
menu.add(0, 0, 0, "退出");
menu.add(0, 1, 1, "关于");
return true;
}
Menu.add()方法
第一个参数(groupId)表示给这个新增的菜单项分配一个分组号;
第二个参数(itemId)表示给这个新增的菜单项分配一个唯一标识id;
第三个参数(order)表示菜单顺序
第四个参数(title)为菜单项的标题。
menu.setGroupEnabled(group, enabled);//设置菜单是否可点击
menu.setGroupVisible(group, visible);//设置菜单是否显示
menu.getItem(index)//获取菜单项
2.响应菜单项点击
当菜单显示出来后,用户点击菜单中的某一菜单项,我们的菜单需要响应这个点击事件。这个也很简单,通过重载onOptionsItemSelected()方法来实现
@Override
public boolean onOptionsItemSelected(Menu.Item item){
switch (item.getItemId()) {
case 0:
this.finish();
break;
case 1:
Intent intent = new Intent();
intent.setClass(this, AboutActivity.class);
this.startActivity(intent);
this.finish();
break;
default:
break;
}
return true;
}
我们还可以通过调用Item.setAlphabeticShortcut()或Item.setNumericShortcut()方法来增加菜单项的快捷键操作。
3.增加子菜单
我们还可以通过调用Menu.addSubMenu()方法,为某个菜单项添加子菜单,这个方法返回一个SubMenu实例,我们可以在这个SubMenu菜单中添加子菜单项。
注:菜单只能有一级子菜单,不支持多级。
1.菜单的生成
对一个Android应用中的每一个屏幕,也就是说,对每一个Activity类,都会拥有一个默认菜单。
在Activity类中,定义了几个与菜单有关的方法,
供继承于Activity类的子类去重载,从而定制我们自己的菜单。这几个方法为:
public boolean onCreateOptionsMenu(android.view.Menu menu);
public boolean onPrepareOptionsMenu(android.view.Menu menu);
public boolean onOptionsItemSelected(android.view.MenuItem item);
为了生成我们自己的菜单,Android为我们提供了两个时机点。
当在Activity类实例启动时,我们可以通过重载onCreateOptionsMenu()来定制我们的菜单;
也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu来实现。
对于第二种方式,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//menu.add(groupId, itemId, order, title);
menu.add(0, 0, 0, "退出");
menu.add(0, 1, 1, "关于");
return true;
}
Menu.add()方法
第一个参数(groupId)表示给这个新增的菜单项分配一个分组号;
第二个参数(itemId)表示给这个新增的菜单项分配一个唯一标识id;
第三个参数(order)表示菜单顺序
第四个参数(title)为菜单项的标题。
menu.setGroupEnabled(group, enabled);//设置菜单是否可点击
menu.setGroupVisible(group, visible);//设置菜单是否显示
menu.getItem(index)//获取菜单项
2.响应菜单项点击
当菜单显示出来后,用户点击菜单中的某一菜单项,我们的菜单需要响应这个点击事件。这个也很简单,通过重载onOptionsItemSelected()方法来实现
@Override
public boolean onOptionsItemSelected(Menu.Item item){
switch (item.getItemId()) {
case 0:
this.finish();
break;
case 1:
Intent intent = new Intent();
intent.setClass(this, AboutActivity.class);
this.startActivity(intent);
this.finish();
break;
default:
break;
}
return true;
}
我们还可以通过调用Item.setAlphabeticShortcut()或Item.setNumericShortcut()方法来增加菜单项的快捷键操作。
3.增加子菜单
我们还可以通过调用Menu.addSubMenu()方法,为某个菜单项添加子菜单,这个方法返回一个SubMenu实例,我们可以在这个SubMenu菜单中添加子菜单项。
注:菜单只能有一级子菜单,不支持多级。