首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android中的Menu点滴记要

2012-10-21 
Android中的Menu点滴记录?@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// 虽然目前android

Android中的Menu点滴记录

?

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// 虽然目前android还没有系统菜单,但是为了兼容到以后的版本,最好加上super.onCreateOptionsMenu(menu);// 第一个参数代表组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。// 第二个参数代表Menu的唯一的ID号,可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断点击了哪个菜单。// 第三个参数代表Menu显示顺序的编号,编号小的显示在前面。// 第四个参数代表标题menu.add(0, MENUITEM1, MENUITEM1, "关于");menu.add(0, MENUITEM2, MENUITEM2, "帮助");menu.add(0, MENUITEM3, MENUITEM3, "更多");return true;}

?可以对Menu进行分组:

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);// 添加4个菜单项,分成2组int group1 = 1;int gourp2 = 2;menu.add(group1, 1, 1, "item 1");menu.add(group1, 2, 2, "item 2");menu.add(gourp2, 3, 3, "item 3");menu.add(gourp2, 4, 4, "item 4");return true;}

?分组之后就能使用menu中提供的方法对组进行操作了,如下:menu.removeGroup(group1); //删除一组菜单

menu.removeGroup(group1);    //删除一组菜单menu.setGroupVisible(gourp2, visible);    //设置一组菜单是否可见menu.setGroupEnabled(gourp2, enabled);    //设置一组菜单是否可点menu.setGroupCheckable(gourp2, checkable, exclusive);    //设置一组菜单的勾选情况

?响应菜单项

?

public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {// 响应每个菜单项(通过菜单项的ID)case MENUITEM1:break;case MENUITEM2:break;case MENUITEM3:break;default:// 对没有处理的事件,交给父类来处理return super.onOptionsItemSelected(item);}// 返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了return true;}

?2.使用监听器

class MenuItemListener implements OnMenuItemClickListener {// 该方法先于onOptionsItemSelected执行。@Overridepublic boolean onMenuItemClick(MenuItem item) {return false;}}

?

menu.getItem(0).setOnMenuItemClickListener(new MenuItemListener()); // 为MenuItem添加监听事件

?3.使用Intent响应菜单

menu.getItem(1).setIntent(new Intent()); // 可以为MenuItem添加Intent

?

子菜单sub Menu

/** * 使用的最多方法是重写activity类的 onOptionsItemSelected(Menu * Item)回调方法,每当有菜单项被点击时,android就会调用该方法,并传入被点击菜单项。 */@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {Resources res = getBaseContext().getResources();// 第一个参数代表组号,android中你可以给菜单分组,以便快速地操作同一组的菜单。// 第二个参数代表Menu的唯一的ID号,可以自己指定,也可以让系统来自动分配,在响应菜单时你需要通过ID号来判断点击了哪个菜单。// 第三个参数代表Menu显示顺序的编号,编号小的显示在前面。// 第四个参数代表标题SubMenu about = menu.addSubMenu(0, MENUITEM1, MENUITEM1, "关于"); // 添加菜单项(多种方式)SubMenu help = menu.addSubMenu(0, MENUITEM2, MENUITEM2, "帮助");SubMenu more = menu.addSubMenu(0, MENUITEM3, MENUITEM3, "更多");// 为MenuItem设置图标about.setIcon(res.getDrawable(R.drawable.ic_launcher));help.setIcon(res.getDrawable(R.drawable.ic_launcher));more.setIcon(res.getDrawable(R.drawable.ic_launcher));// 为more菜单添加子订单MenuItem display = more.add(0, MENUITEM3, MENUITEM3, "设置");display.setIcon(R.drawable.ic_launcher);// 子菜单项不支持显示图标,这样做是没意义的,尽管不会报错!more.add(0, MENUITEM3, MENUITEM3, "退出");more.setHeaderIcon(R.drawable.ic_launcher); // 以添加子菜单项栏目的标题图标return true;}

?Menu可以包含多个SubMenu,SubMenu可以包含多个MenuItem,但是SubMenu不能包含SubMenu,及子菜单不能嵌套!

?

public class MyListActivity extends ListActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.two);simpleShowList();this.registerForContextMenu(getListView());}private void simpleShowList() {String[] item = new String[] { "ListItem1", "ListItem2", "ListItem3", ListItem4" };ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, item);this.setListAdapter(adapter);}}?

2.在onCreateContextMenuInfo(...)中生成上下文菜单。

@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {menu.setHeaderTitle("文件操作");menu.add(0, 1, Menu.NONE, "发送");menu.add(0, 2, Menu.NONE, "复制");menu.add(0, 3, Menu.NONE, "重命名");menu.add(0, 4, Menu.NONE, "删除");}
??

@Overridepublic boolean onContextItemSelected(MenuItem item) {// 得到当前被选中的item信息AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();switch (item.getItemId()) {case 1: break;case 2: break;case 3: break;case 4:break;default:return super.onContextItemSelected(item);}return true;}?

?

@Overridepublic void onOptionsMenuClosed(Menu menu) {menu.clear();super.onOptionsMenuClosed(menu);}

热点排行