Android平台提供了3中菜单的实现方式,即选项菜单(OptionMenu)、上下文菜单(ContextMenu)、子菜单(SubMenu). 
总的来说,还是比较容易实现的,新手上路,学了就把大概的写下来,以备健忘吧。 

1 Option Menu  
这种应该是最常见的,一般手机上都会提供Menu的按钮,对应的就是这个菜单弹出。 

主要步骤就是复写Activity父类中的onCreateOptionMenu(Menu menu)方法,然后通过Menu的add方法来添加菜单进去。 

    1. @Override
    2. public boolean
    3. 0, MENU_ITEM_COUNTER, 0, "开始");  
    4. 0, MENU_ITEM_COUNTER + 1, 0, "暂停");  
    5. 0, MENU_ITEM_COUNTER + 2, 0, "结束");  
    6.   
    7. return super.onCreateOptionsMenu(menu);  
    8. }



    ItemId是可以自己定义的int。 

    1. private static final int


    设置好Menu后需要对每一个MenuItem进行定义处理,当用户点击是会调用onOptionsItemSelected(MenuItem item)这个方法,需要对该方法进行重写 

    1. @Override
    2. public boolean
    3. switch
    4. case
    5. "You click "
    6. "Menu");  
    7. break;  
    8. case MENU_ITEM_COUNTER + 1:  
    9. "You click "
    10. "Menu");  
    11. break;  
    12. case MENU_ITEM_COUNTER + 2:  
    13. "You click "
    14. "Menu");  
    15. break;  
    16. default:  
    17. break;  
    18.     }  
    19. return super.onOptionsItemSelected(item);  
    20. }


    这边我做了一个简单的处理,就对TextView进行了Text修改,这里可以做很多业务逻辑。 


    tip:Android最多支持6个MenuItem,多了以后就摆在More里面。

     



    2.Context Menu

     


    翻译过来就是上下文菜单,其实知道Context最好是意会搞开发的都懂的,这个Mnue还是相当有用的,比如对于文件管理器来说一些增删改查就可以摆在ContextMenu中,它其实是实现了一个用户长按点击后弹出的来一个菜单。


    写了一个例子,我感觉有点糟蹋这个功能了,不过也无所谓啦,只是例子。 



    首先,ContextMenu在新建是会调onCreateContextMune(Menu menu)方法,我们需要对它进行复写。 

    1. @Override
    2. public void
    3.             ContextMenuInfo menuInfo) {  
    4.           
    5. //设置面积大一点,好点唉
    6. "*******************************\n" + "要大一些看得才清楚的"
    7. "*******************************\n");  
    8.           
    9. //itemId注意不要重复,否则处理起来很蛋疼
    10. 0, MENU_ITEM_COUNTER + 3, 0, "白色");  
    11. 0, MENU_ITEM_COUNTER + 4, 0, "红色");  
    12. 0, MENU_ITEM_COUNTER + 5, 0, "蓝色");  
    13.   
    14. super.onCreateContextMenu(menu, v, menuInfo);  
    15.     }



    然后注册一下


    1. //要记得在需要的控件上注册上下文菜单
    2.     registerForContextMenu(myTextView);

    当用户点击时会调用onContextItemSelected(MenuItem item)方法,对其重写

    1. @Override
    2. public boolean
    3.       
    4. //根据选择不同,对Text进行不同背景色的显示
    5. switch
    6. case MENU_ITEM_COUNTER + 3:  
    7.         myTextView.setBackgroundColor(Color.WHITE);  
    8. break;  
    9. case MENU_ITEM_COUNTER + 4:  
    10.         myTextView.setBackgroundColor(Color.RED);  
    11. break;  
    12. case MENU_ITEM_COUNTER + 5:  
    13.         myTextView.setBackgroundColor(Color.BLUE);  
    14. break;  
    15. default:  
    16. break;  
    17.     }  
    18.       
    19. return super.onContextItemSelected(item);  
    20. }


    其实看看就知道了,两种实现Menu的方式几乎是一样的,只是在调用方法的时候不一样而已。 




    3 Sub Menu

     


    个人觉得子菜单的概念应该是从属于以上两个菜单类型的,即两种菜单类型中都可以使用子菜单。 


    实现很简单 

    1. //申明一个子菜单
    2. SubMenu subMenu = menu.addSubMenu("这个是一个子菜单");  
    3. subMenu.add(0, MENU_ITEM_COUNTER + 6, 0, "这个是子菜单的内容");