Android Menu介绍

    技术2022-05-20  77

    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都被注册到这个上下文菜单。


    最新回复(0)