Menu的使用

三种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;  
    }  



 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值