现在的位置: 首页 > 综合 > 正文

Android Menu介绍

2013年10月03日 ⁄ 综合 ⁄ 共 2654字 ⁄ 字号 评论关闭

options menu: 
 

按MENU键来显示, 在屏幕最下面最多显示6个菜单选项(icon
menu,不可以有checkable),如果多于6个的其他的会以“more” icon menu来调出(expanded
menu)。

通过activity的onCreateOptionsMenu

来生成,

只能在menu第一次生成时调用;想改变options
menu,

只能在onPrepareOptionsMenu

里来实现;处理 options
menu 里菜单项,

要用activity的onOptionsItemSelected

来实现。

 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub

        menu.add(0, MENU_ITEM_DELETE_ALL, 0, R.string.recentCalls_deleteAll)
        .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
       
        return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()){
        case MENU_ITEM_DELETE_ALL:
            showDialog(DIALOG_DELETE_ALL);
            break;
        }
        return super.onMenuItemSelected(featureId, item);
    }

这个为最简单的OptionsMenu的实现

 

 

 

context menu:
  

在view上需要按上2s显示,与某个view绑定在一起,

在activity的onCreate里使用registerForContextMenu(getListView())

为view注册context
menu,

菜单的实现由在activity的onCreateContextMenu

来完成。

在activity的onContextItemSelected

完成选中菜单的处理。

 

 

 

为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数:onCreateContextMenu() 和
onContextItemSelected()。在回调函数onCreateContextMenu()里,你可以通过使用一个add()方法来添加菜
单项,或者通过扩充一个定义在XML中的菜单资源。然后,通过registerForContextMenu()为这个视图注册一个上下文菜单
ContextMenu.   
  
比如,下面的代码可以被用到Notepad应用程序中来为列表中的每一个注释添加一个上下文菜单:   
  
public void onCreateContextMenu(ContextMenu menu, View v,   
                                ContextMenuInfo menuInfoIn
) {   

  super.onCreateContextMenu(menu, v, menuInfoIn);

        //AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) menuInfoIn;

        //Cursor cursor = (Cursor) mAdapter.getItem(menuInfo.position);
  menu.add(0, EDIT_ID, 0, "Edit");   
  menu.add(0, DELETE_ID, 0,  "Delete");   
}   
    
public boolean onContextItemSelected(MenuItem item
) {   
  AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();  
 
  switch (item.getItemId()) {   
  case EDIT_ID:   
    editNote(info.id);   
    return true;   
  case DELETE_ID:   
    deleteNote(info.id);   
    return true;   
  default:   
    return super.onContextItemSelected(item);   
  }   
}   
  

onCreateContextMenu()中,除了给出将添加MenuItems的ContextMenu外,还需要给定选中的视图和一个上下文菜单信
息ContextMenuInfo对象,该对象提供了选中对象的附加信息。在本例中,onCreateContextMenu()没做什么特别的事-只是
添加了一些菜单项。在onContextItemSelected() 回调函数中,我们从MenuItem中请求
AdapterContextMenuInfo,该对象提供当前选中项的信息。我们从中所要的只是这个选中项的列表ID,所以无论编辑还是删除一个注释,
我们通过这个对象的AdapterContextMenuInfo.info字段来找到该ID。这个ID被传递给editNote() 和
deleteNote()方法来执行相应的动作。   
  
现在,要为一个列表视图中的所有项注册上下文菜单,我们可以传递整个的列表视图对象给registerForContextMenu(View)
 方法:   
  
registerForContextMenu(getListView());   

  


记住,你可以传递任何视图对象来注册一个上下文菜单。这里,getListView()返回这个被用于Notepad应用程序的列表活动ListActivity中的列表视图对象。这样,这个列表中的任何item都被注册到这个上下文菜单。

抱歉!评论已关闭.