Android中的菜单包括:OptionsMenu(选项菜单)

                                          ContextMenu(上下文菜单)

                                          PopMenu(弹出式菜单)

                                          PopupWindow(弹出式窗口) 

1、OptionsMenu(选项菜单)的使用

/**
 * 使用选项菜单的步骤:
 * 1、复写Activity的onCreateOptinisMenu方法创建选项菜单
 * 2、填充菜单内容有两种方式:
 * 2.1 通过菜单填充器MenuInfater将指定的菜单xml文件填充到某一menu对象中
 * #菜单xml文件:在res文件夹中创建menu文件夹,在此文件夹中创建menu配置文件
 * 2.2 通过menu对象的addItem方法动态添加某一菜单条目
 * 3、复写Activity的onOptionsItemSelected方法实现菜单Item的点击事件
 */
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
     /*
      *  使用menu对象的add方法动态添加一个Item
*  第二个参数是item的id值
*  第四个参数是item的title
*/
     menu.add(Menu.NONE, 1, Menu.NONE, "Dynamic 1");
     menu.add(Menu.NONE, 2, Menu.NONE, "Dynamic 2");
     menu.add(Menu.NONE, 3, Menu.NONE, "Dynamic 3");
     //1 获取MenuInflater对象
     MenuInflater inflater = getMenuInflater();
     //2 将menu的xml配置文件填充到menu对象中
     inflater.inflate(R.menu.main, menu);
     return super.onCreateOptionsMenu(menu);
 }
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case 1:
            Toast.makeText(this, "Dynamic 1被点击", Toast.LENGTH_SHORT).show();
            break;
        case 2:
            Toast.makeText(this, "Dynamic 2被点击", Toast.LENGTH_SHORT).show();
            break;
        case 3:
            Toast.makeText(this, "Dynamic 3被点击", Toast.LENGTH_SHORT).show();
            break;
        case R.id.red:
            text.setTextColor(Color.RED);
            break;
        case R.id.green:
            text.setTextColor(Color.GREEN);
            break;
        case R.id.blue:
            text.setTextColor(Color.BLUE);
            break;
        case R.id.exit:
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}

menu的xml配置文件写法:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!--每一个item就是菜单栏中的一个条目-->
    <!--一个item必须包含id和title-->
    <item
        android:id="@+id/color"
        android:title="选择颜色">
        <menu>
            <group>
                <item
                    android:id="@+id/red"
                    android:title="红色" />
                <item
                    android:id="@+id/green"
                    android:title="绿色" />
                <item
                    android:id="@+id/blue"
                    android:title="蓝色" />
            </group>
        </menu>
    </item>

    <item
        android:id="@+id/exit"
        android:title="退出" />
</menu>

2、ContextMenu(上下文菜单)的使用

/**
 * 使用上下文菜单的步骤:
 * 1、复写Activity的onCreateContextMenu,创建上下文菜单选项
 * 2、复写Activity的onContextItemSelected方法拦截菜单Item的点击事件
 * 3、调用registerForContextMenu(View)方法将上下文菜单注册到指定的View上,
 * 长按所注册View视图,会触发上下文菜单弹出
 */
/**
 * 第一个参数:ContextMenu类型,就是当前Activity所显示的上下文菜单
 * 第二个参数:调用registerForContextMenu时所注册View对象
 * 第三个参数:ContextMenuInfo系统生成对ContextMenu的描述类,假如注册的是AdapterView,
 *           则此ContextMenuInfo实质上AdapterContextMenuInfo类型,通过此类型可以获取用户
 *           长按的是哪一个AdapterView中的item
 */
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    int position = info.position;
    String content = (String) listView.getItemAtPosition(position);
    //设置menu的标题
    menu.setHeaderTitle("地区简介:"+ content);
    //给menu动态添加item
    menu.add(Menu.NONE, 1, Menu.NONE, "天气");
    menu.add(Menu.NONE, 2, Menu.NONE, "风景");
    menu.add(Menu.NONE, 3, Menu.NONE, "美食");

    super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case 1:
            Toast.makeText(this, "天气被点击", Toast.LENGTH_SHORT).show();
            break;
        case 2:
            Toast.makeText(this, "风景被点击", Toast.LENGTH_SHORT).show();
            break;
        case 3:
            Toast.makeText(this, "美食被点击", Toast.LENGTH_SHORT).show();
            break;

        default:
            break;
    }
    return super.onContextItemSelected(item);

}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = ((ListView) findViewById(R.id.listView));
    registerForContextMenu(listView);
}

3、 PopMenu(弹出式菜单)的使用

/**
 * PopMenu的使用步骤:
 * 1、直接new PopMenu,需要指定所依赖的View对象
 * 2、通过MenuInflater给PopMenu中的Menu对象填充显示内容
 * 3、实现PopMenu的Item点击事件
 * 4、调用PopMenu.show方法显示PopMenu
 *
 */
private void showPopMenu(final View view) {
    //1、 创建PopMenu,并指定锚
    PopupMenu popupMenu = new PopupMenu(this,view);
    //2、填充PopMenu的item
    getMenuInflater().inflate(R.menu.main,popupMenu.getMenu());
    //3、设置item的点击事件
    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        /**
         * 当PopMenu中的每一个Item被点击时,此方法被回调
         */
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.width:
                    Toast.makeText(MainActivity.this, "width is "
                            + view.getWidth(), Toast.LENGTH_SHORT).show();
                    break;
                case R.id.height:
                    Toast.makeText(MainActivity.this, "height is "
                            + view.getHeight(), Toast.LENGTH_SHORT).show();
                    break;

                default:
                    break;
            }
            return false;
        }
    });

    popupMenu.show();
}