Android之Memu

Menu:一个管理菜单项的接口
Menus:“活动”中一重要的用户界面组成部分,它让开发者可以以自己熟习的方式去处理事件,应用Android框架,
我们可以轻松的在自己的应用程序中增加标准的菜单。
菜单分为三类:
Options Menu:三类菜单中最重要的,当用户点出“Menu"按钮时显示。面在3。0以后的版本中,也可以通用“Anction Bar”来显示。
Context Menu:类似于PC机中点击”右键“所弹出的菜单项,它一般注册在列表示图中。
Submenu:当点击菜单项时显示出的子菜单项。
(注:三类菜单其实都是MenuItem的集合)
Options Menu 的创建及应用
一、创建菜单集合项,可以通过两种方式
A:XML文件格式,在 res/menu/下新建一个menu资源文件
如:game_file.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
            <group android:id="@+id/group1" android:menuCategory="container" android:enabled="true" android:checkableBehavior="none" android:orderInCategory="0" android:visible="true">
            <item android:id="@+id/item1" android:title="first-item" android:menuCategory="container" android:checked="true" android:visible="true"></item>
            <item android:id="@+id/item2" android:title="second-item" android:menuCategory="container" android:checked="false" android:visible="true"></item>
            <item android:id="@+id/item3" android:title="third-item" android:menuCategory="container" android:checked="false" android:visible="true"></item>
            </group>
        </menu>
而在源代码中:
@Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {              
            MenuInflater inflater = getMenuInflater();
            //将资源文件“转换”成菜单对象
            inflater.inflate(R.menu.game_file, menu);
            return super.onCreateOptionsMenu(menu);
        }
B:在JAVA创建的时候增加:
final private int menuMode =Menu.FIRST; 
        final private int menuExit =Menu.FIRST + 1;
            final private int menuFile=Menu.FIRST+2;

        @Override
        public boolean onCreateOptionsMenu(Menu menu) 
        {
            menu.add(0, menuMode, Menu.NONE, "Map Mode");
            menu.add(0, menuExit, Menu.NONE, "Back");
            menu.add(0,menuFile,Menu.NONE,"File Open");
            return super.onCreateOptionsMenu(menu);
        }
说明:public boolean onCreateOptionsMenu(Menu menu) 
当用户第一次打开应用程序时,将调用onCreateOptionsMenu进行菜单的创建。创建菜单当然是用于与用户交互的,所以呢。。。且有下一步:
二、当用户选择一个菜单项进行交互时,重写“onOptionsItemClick(MenuItem Item)”方法进行功能自定义:

   @Override

    public boolean onOptionsItemSelected(MenuItem item)
    {
        int fId=item.getItemId();//得到唯一ID
        switch(fId)
        {
            case menuMode:
            {
                Toast.makeText(getApplicationContext(),"MapMode",Toast.LENGTH_LONG)
                    .show();
                break;
            }
            case menuExit:
            { 
                Toast.makeText(getApplicationContext(),"Back",Toast.LENGTH_LONG)
                .show();
                break;
            }
            case menuFile:
            {
                Toast.makeText(getApplicationContext(), "Open File",Toast.LENGTH_SHORT)
                    .show();
                break;
            }
            case R.id.item2:
            {
                String tempTitle=(String) item.getTitle();

                Toast.makeText(getApplicationContext(), tempTitle,Toast.LENGTH_SHORT)
                    .show();
                break;
            }
            default:
            {
                Toast.makeText(getApplicationContext(),"NONE",Toast.LENGTH_LONG)
                .show();
                break;
            }
        }
        return super.onOptionsItemSelected(item);
    }

三、扩展,3.0后,Android都是在用户第一次使用应用程序的时候就创建菜单,而不像以前是在用户第一次使用菜单时创建,有时,根据实际需要,在某些

情况下动态增加菜单: onPrepareOptionsMenu()
如:
@Override
    public boolean onPrepareOptionsMenu (Menu menu)
    {
        menu.add(0,menuMode,Menu.NONE,"MenuMode");
        return super.onPrepareOptionsMenu(menu);
    }
要注意的是。在每次用户打开菜单时,都将执行onPrepareOptionsMenu,所以,在动态增加的时候得判断是否已添加。

 参考资源:http://developer.android.com/guide/topics/ui/menus.html

原文地址:https://www.cnblogs.com/runner/p/bora_android_OptionsMenu.html