菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu

菜单Menu

  在Android中,所有的菜单创建方法都由Activity类本身提供。Android系统中一共有3种菜单:选项菜单(ptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),下面分别介绍。

一、选项菜单(OptionsMenu)

  选项菜单是一种最常用也是最基本的菜单,通过覆写android.app.Activity为在几个方法即可实现。这些方法有:

(1)设置多个菜单项(MenuItem),如果返回true,表示显示菜单,反之则不显示:

Public booleanonCreateOptionsMenu(Menu menu)

(2)判断菜单项的操作:public boolean onOptionsItemSelected(MenuItemitem)

(3)当菜单关闭时触发此操作:public void onOptionsMenuClose(Menu menu)

(4)在菜单显示前触发此操作,如果返回true,则继续调用onCreateOptionsMenu()方法,反之不调用:public BooleanonPrepareOptionsMenu(Menu menu)

例 1 程序运行效果截图

菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu

 

实现过程:

1. 编写main.xml布局管理器

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout   

    xmlns:android="http://schemas.android.com/apk/res/android"  

    android:orientation="vertical"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    android:background="#00ff00">  

    <TextView   

        android:id="@+id/textview"  

        android:layout_width="wrap_content"  

        android:layout_height="wrap_content"  

        android:text="按下键盘上的 Menu 键将会出现选择菜单,快试试吧..."/>  

</LinearLayout> 

2. 编写MainActivity程序

import android.app.Activity;  

import android.os.Bundle;  

import android.view.Menu;  

import android.view.MenuItem;  

import android.widget.Toast;  

  

public class MainActivity extends Activity {  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        super.setContentView(R.layout.main);  

    }  

    @Override  

    public boolean onCreateOptionsMenu(Menu menu){  

        //super.getMenuInflater().inflate(R.menu.main_menu, menu);  

        menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除")  

        .setIcon(android.R.drawable.ic_menu_delete);  

        menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存")  

        .setIcon(android.R.drawable.ic_menu_save);  

        menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助")  

        .setIcon(android.R.drawable.ic_menu_help);  

        menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加")  

        .setIcon(android.R.drawable.ic_menu_add);  

        menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细")  

        .setIcon(android.R.drawable.ic_menu_info_details);  

        menu.add(Menu.NONE, Menu.FIRST + 6, 7, "发送")  

        .setIcon(android.R.drawable.ic_menu_send);  

        menu.add(Menu.NONE, Menu.FIRST + 7, 3, "编辑")  

        .setIcon(android.R.drawable.ic_menu_edit);  

        return true;  

    }  

    @Override  

    public boolean onOptionsItemSelected(MenuItem item){  

        switch(item.getItemId()){  

        case Menu.FIRST + 1:  

            Toast.makeText(this, "你选择了“添加菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        case Menu.FIRST + 2:  

            Toast.makeText(this, "你选择了“保存菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        case Menu.FIRST + 3:  

            Toast.makeText(this, "你选择了“编辑菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        case Menu.FIRST + 4:  

            Toast.makeText(this, "你选择了“详细菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        case Menu.FIRST + 5:  

            Toast.makeText(this, "你选择了“删除菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        case Menu.FIRST + 6:  

            Toast.makeText(this, "你选择了“发送菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        case Menu.FIRST + 7:  

            Toast.makeText(this, "你选择了“帮助菜单”项", Toast.LENGTH_LONG).show();  

        break;  

        }  

        return false;  

    }  

    @Override  

    public void onOptionsMenuClosed(Menu menu){  

        Toast.makeText(this, "选择菜单关闭了", Toast.LENGTH_LONG).show();  

    }  

    @Override  

    public boolean onPrepareOptionsMenu(Menu menu){  

        Toast.makeText(this, "在菜单显示(onCreateOptionsMenu())之前系统会调用此操作,可以" +  

                "在此操作中完成一些处理操作。)",  

                Toast.LENGTH_LONG).show();  

        return true;  

    }  

}  

  此程序中直接通过onCreateOptionsmenu()方法在菜单中增加了多个菜单项,在应用中也可以通过配置资源文件的方式设置所有的菜单项,可在res文件夹中建立单项的配置文件。建立res\menu\menu.xml文件配置菜单项:

<menu xmlns:android="http://schemas.android.com/apk/res/android">  

    <item   

        android:id="@+id/item_1"  

        android:title="添加"  

        android:icon="@android:drawable/ic_menu_add"/>  

    <item   

        android:id="@+id/item_2"  

        android:title="保存"  

        android:icon="@android:drawable/ic_menu_save"/>  

    <item   

        android:id="@+id/item_3"  

        android:title="编辑"  

        android:icon="@android:drawable/ic_menu_edit"/>  

    <item   

        android:id="@+id/item_4"  

        android:title="详细"  

        android:icon="@android:drawable/ic_menu_info_details"/>  

    <item   

        android:id="@+id/item_5"  

        android:title="删除"  

        android:icon="@android:drawable/ic_menu_delete"/>  

    <item   

        android:id="@+id/item_6"  

        android:title="帮助"  

        android:icon="@android:drawable/ic_menu_send"/>  

    <item   

        android:id="@+id/item_7"  

        android:title="发送"  

        android:icon="@android:drawable/ic_menu_help"/>  

</menu> 

  在此配置文件中通过<item>元素定义了多个菜单项,要从此配置文件中取出数据,就要修改onCreateOptionsMenu(),利用super.getMenuInfalter().inflater()方法加载menu.xml配置文件中的菜单信息,修改后的代码如下:

Public Boolean onCreateOptionsMenu(Menu menu){   //显示菜单  

    super.getMenuInflater().inflate(R.menu.menu, menu);   //填充菜单项  

    return true;  

} 

二、上下文菜单ContextMenu

  上下文菜单类似于Windows中的右键菜单的操作形式,在android中,在一个列表显示(ListView)操作时,用户可以通过长按操作打开某些操作的菜单,这种菜单就是上下文菜单。要进行上下文菜单的操作,需要在Activity程序中覆写如下方法:

(1)public void onCreateContextMenu(ContextMenu menu, View view,

           ContextMenu.ContextMenuInfo menuInfo):在此方法中可以设置要显示的菜单项;

(2)public boolean onContextItemSelected(MenuItemitem):当某个菜单项被选中时,触发此操作;

(3)public void onContextMenuClosed(Menu menu):当菜单项关闭时触发此操作。

例 2 程序运行效果截图

菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu

 

实现过程:

1.直接编写MainActivity程序

[java]  view plain copy print ?
 
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.view.ContextMenu;  
  4. import android.view.Menu;  
  5. import android.view.MenuItem;  
  6. import android.view.View;  
  7. import android.widget.ArrayAdapter;  
  8. import android.widget.ListView;  
  9. import android.widget.Toast;  
  10.   
  11. public class MainActivity extends Activity {  
  12.     private String data[] = {"狂人日记""bolg.csdn.net/runninglion",  
  13.             "作者:lion""欢迎进入本博客""感谢:www.csdn.net"};  
  14.     private ListView listView;  
  15.   
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         listView = new ListView(this);   //实例化组件  
  20.         listView.setAdapter(new ArrayAdapter<String>(this,   //将数据包装  
  21.                 android.R.layout.simple_expandable_list_item_1,   //每行显示一条数据  
  22.                 data));   //设置组件内容  
  23.         super.setContentView(listView);   //将组件添加到屏幕中  
  24.         super.registerForContextMenu(listView);   //添加上下文菜单  
  25.     }  
  26.     @Override  
  27.     public void onCreateContextMenu(ContextMenu menu, View view,  
  28.             ContextMenu.ContextMenuInfo menuInfo){  
  29.         super.onCreateContextMenu(menu, view, menuInfo);  
  30.         menu.setHeaderTitle("信息操作");  
  31.         menu.add(Menu.NONE, Menu.FIRST + 11"添加联系人");  
  32.         menu.add(Menu.NONE, Menu.FIRST + 22"查看详情");  
  33.         menu.add(Menu.NONE, Menu.FIRST + 33"删除信息");  
  34.         menu.add(Menu.NONE, Menu.FIRST + 44"另存为");  
  35.         menu.add(Menu.NONE, Menu.FIRST + 55"编辑");  
  36.     }  
  37.     @Override  
  38.     public boolean onContextItemSelected(MenuItem item){  
  39.         switch(item.getItemId()){  
  40.         case Menu.FIRST + 1:  
  41.             Toast.makeText(this"你选择了“添加联系人”项", Toast.LENGTH_LONG).show();  
  42.         break;  
  43.         case Menu.FIRST + 2:  
  44.             Toast.makeText(this"你选择了“查看详情”项", Toast.LENGTH_LONG).show();  
  45.         break;  
  46.         case Menu.FIRST + 3:  
  47.             Toast.makeText(this"你选择了“删除信息”项", Toast.LENGTH_LONG).show();  
  48.         break;  
  49.         case Menu.FIRST + 4:  
  50.             Toast.makeText(this"你选择了“另存为”项", Toast.LENGTH_LONG).show();  
  51.         break;  
  52.         case Menu.FIRST + 5:  
  53.             Toast.makeText(this"你选择了“编辑”项", Toast.LENGTH_LONG).show();  
  54.         break;  
  55.         }  
  56.         return false;  
  57.     }  
  58.     @Override  
  59.     public void onContextMenuClosed(Menu menu){  
  60.         Toast.makeText(this"上下文菜单关闭了", Toast.LENGTH_LONG).show();  
  61.     }  
  62. }  

  也可以像例 1 一样通过配置资源文件来得到想要显示的菜单项。

 

三、子菜单SubMenu

  可以为每一个菜单定义多个子菜单(SubMenu),子菜单的创建依然要通过Activity类中的onCreateOptionsMenu()方法完成。

例 3 程序运行效果截图

菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu

实现过程:

1. 直接编写MainActivity程序

[java]  view plain copy print ?
 
  1. import android.app.Activity;  
  2. import android.view.Menu;  
  3. import android.view.MenuItem;  
  4. import android.view.SubMenu;  
  5. import android.widget.Toast;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     @Override  
  10.     public boolean onCreateOptionsMenu(Menu menu){  
  11.         SubMenu filemenu = menu.addSubMenu("文件");  
  12.         SubMenu editmenu = menu.addSubMenu("编辑");  
  13.   
  14.         filemenu.add(Menu.NONE, Menu.FIRST + 11"新建");  
  15.         filemenu.add(Menu.NONE, Menu.FIRST + 22"打开");  
  16.         filemenu.add(Menu.NONE, Menu.FIRST + 33"保存");  
  17.         editmenu.add(Menu.NONE, Menu.FIRST + 44"撤销");  
  18.         editmenu.add(Menu.NONE, Menu.FIRST + 55"恢复");  
  19.           
  20.         return true;  
  21.     }  
  22.     @Override  
  23.     public boolean onOptionsItemSelected(MenuItem item){  
  24.         switch(item.getItemId()){  
  25.         case Menu.FIRST + 1:  
  26.             Toast.makeText(this"你选择了“新建”项", Toast.LENGTH_LONG).show();  
  27.         break;  
  28.         case Menu.FIRST + 2:  
  29.             Toast.makeText(this"你选择了“打开”项", Toast.LENGTH_LONG).show();  
  30.         break;  
  31.         case Menu.FIRST + 3:  
  32.             Toast.makeText(this"你选择了“保存”项", Toast.LENGTH_LONG).show();  
  33.         break;  
  34.         case Menu.FIRST + 4:  
  35.             Toast.makeText(this"你选择了“撤销”项", Toast.LENGTH_LONG).show();  
  36.         break;  
  37.         case Menu.FIRST + 5:  
  38.             Toast.makeText(this"你选择了“恢复”项", Toast.LENGTH_LONG).show();  
  39.         break;  
  40.         }  
  41.         return false;  
  42.     }  
  43. }  

也可以像例 1 一样通过配置资源文件来得到想要显示的子菜单项。

你可能感兴趣的:(contextMenu)