Menu的使用

来源:互联网 发布:json转换成字符串 编辑:程序博客网 时间:2024/05/06 20:10

三种menu:1、OptionsMenu;2、ContextMenu;3、SubMenu

一、OptionsMenu

        public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu 。

  public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。

  public void onOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。

  public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。如果返回为false,则onCreateOptionsMenu(Menu menu)将不会被调用。

  public boolean onMenuOpened(int featureId, Menu menu):单打开后发生的动作。

       默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus

       如下一个利用系统再带图标实现的OptionMenu实例:
      

@Override    public boolean onCreateOptionsMenu(Menu menu){    menu.add(Menu.NONE,Menu.FIRST+1,5,"删除").setIcon(android.R.drawable.ic_delete);    menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(android.R.drawable.ic_menu_edit);    menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(android.R.drawable.ic_menu_help);    menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(android.R.drawable.ic_menu_add);    menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(android.R.drawable.ic_menu_info_details);    menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(android.R.drawable.ic_menu_send);    return true;        }    @Override    public boolean onOptionsItemSelected(MenuItem item){    switch(item.getItemId()){    case Menu.FIRST + 1:    Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();    break;    case Menu.FIRST + 2:    Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show();    break;    case Menu.FIRST + 3:    Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();    break;    case Menu.FIRST + 4:    Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();    break;    case Menu.FIRST + 5:    Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show();    break;    case Menu.FIRST + 6:    Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();    break;    }    return false;    }


 二、ContextMenu

当一个视图注册到一个上下文菜单时,执行一个在该对象上的“长按”(按住不动差不多两秒钟)动作,将出现一个提供相关功能的浮动菜单,这个菜单就是上下文菜单。

分三个步骤实现:

1、重载public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)

2、重载public boolean onContextItemSelected(MenuItem item)

3、为一个view注册 ,registerForContextMenu(View v)

如下一个例子:

@Override public void onCreateContextMenu(ContextMenu contextMenu,View view,ContextMenuInfo info){  super.onCreateContextMenu(contextMenu, view, info);  contextMenu.add(ContextMenu.NONE, 0, 0, "Edit");  contextMenu.add(ContextMenu.NONE, 1, 1, "Delete"); } @Override public boolean onContextItemSelected(MenuItem item){  AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();  switch(item.getItemId()){  case 0:   Toast.makeText(this, "Edit", Toast.LENGTH_LONG).show();   return true;  case 1:   Toast.makeText(this, "Delete", Toast.LENGTH_LONG).show();   return true;   default:    return super.onContextItemSelected(item);  } }

然后在Activity的onCreate中添加:

View mainView = View.inflate(this, R.layout.main, null);registerForContextMenu(mainView);

三、SubMenu

子菜单就是将相同功能的分组进行多级显示的一种菜单。

创建子菜单的步骤:

1、  覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单

2、  调用SubMenu的add()方法,添加子菜单

3、  覆盖onContextItemSelected()方法,响应子菜单的单击事件

看下面一个例子:

private static final int ITEM1 = Menu.FIRST;  private static final int ITEM2 = Menu.FIRST + 1; //..............................    @Override    public boolean onCreateOptionsMenu(Menu menu){                SubMenu file = menu.addSubMenu("文件");          SubMenu edit = menu.addSubMenu("编辑");                    file.add(Menu.NONE, ITEM1, 0, "新建");          file.add(Menu.NONE, ITEM2, 1, "打开");                  return true;      }      @Override    public boolean onOptionsItemSelected(MenuItem item){          switch (item.getItemId()) {          case ITEM1:              setTitle("新建文件");              break;               case ITEM2:              setTitle("打开文件");              break;          }          return true;      }