首页 > 其他 > 详细

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

时间:2014-03-03 23:46:25      阅读:953      评论:0      收藏:0      [点我收藏+]

菜单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 程序运行效果截图

bubuko.com,布布扣

 

实现过程:

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

bubuko.com,布布扣
<?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> 
bubuko.com,布布扣

2. 编写MainActivity程序

bubuko.com,布布扣
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;  
    }  
}  
bubuko.com,布布扣

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

bubuko.com,布布扣
<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> 
bubuko.com,布布扣

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

bubuko.com,布布扣
Public Boolean onCreateOptionsMenu(Menu menu){   //显示菜单  
    super.getMenuInflater().inflate(R.menu.menu, menu);   //填充菜单项  
    return true;  
} 
bubuko.com,布布扣

二、上下文菜单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 程序运行效果截图

bubuko.com,布布扣

 

实现过程:

1.直接编写MainActivity程序

  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 程序运行效果截图

bubuko.com,布布扣

实现过程:

1. 直接编写MainActivity程序

  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 一样通过配置资源文件来得到想要显示的子菜单项。

菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/duanxz/p/3578194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!