菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu - duanxz
来源:互联网 发布:万网域名不备案能用吗 编辑:程序博客网 时间:2024/05/21 05:20
菜单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 程序运行效果截图
实现过程:
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 程序运行效果截图
实现过程:
1.直接编写MainActivity程序
[java] view plain copy print ?
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.ContextMenu;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- private String data[] = { "狂人日记" , "bolg.csdn.net/runninglion" ,
- "作者:lion" , "欢迎进入本博客" , "感谢:www.csdn.net" };
- private ListView listView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- listView = new ListView( this ); //实例化组件
- listView.setAdapter( new ArrayAdapter<String>( this , //将数据包装
- android.R.layout.simple_expandable_list_item_1, //每行显示一条数据
- data)); //设置组件内容
- super .setContentView(listView); //将组件添加到屏幕中
- super .registerForContextMenu(listView); //添加上下文菜单
- }
- @Override
- public void onCreateContextMenu(ContextMenu menu, View view,
- ContextMenu.ContextMenuInfo menuInfo){
- super .onCreateContextMenu(menu, view, menuInfo);
- menu.setHeaderTitle( "信息操作" );
- menu.add(Menu.NONE, Menu.FIRST + 1 , 1 , "添加联系人" );
- menu.add(Menu.NONE, Menu.FIRST + 2 , 2 , "查看详情" );
- menu.add(Menu.NONE, Menu.FIRST + 3 , 3 , "删除信息" );
- menu.add(Menu.NONE, Menu.FIRST + 4 , 4 , "另存为" );
- menu.add(Menu.NONE, Menu.FIRST + 5 , 5 , "编辑" );
- }
- @Override
- public boolean onContextItemSelected(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 ;
- }
- return false ;
- }
- @Override
- public void onContextMenuClosed(Menu menu){
- Toast.makeText( this , "上下文菜单关闭了" , Toast.LENGTH_LONG).show();
- }
- }
也可以像例 1 一样通过配置资源文件来得到想要显示的菜单项。
关于多行模式和浮动上下文菜单
三、子菜单SubMenu
可以为每一个菜单定义多个子菜单(SubMenu),子菜单的创建依然要通过Activity类中的onCreateOptionsMenu()方法完成。
例 3 程序运行效果截图
实现过程:
1. 直接编写MainActivity程序
[java] view plain copy print ?
- import android.app.Activity;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.SubMenu;
- import android.widget.Toast;
- public class MainActivity extends Activity {
- @Override
- public boolean onCreateOptionsMenu(Menu menu){
- SubMenu filemenu = menu.addSubMenu( "文件" );
- SubMenu editmenu = menu.addSubMenu( "编辑" );
- filemenu.add(Menu.NONE, Menu.FIRST + 1 , 1 , "新建" );
- filemenu.add(Menu.NONE, Menu.FIRST + 2 , 2 , "打开" );
- filemenu.add(Menu.NONE, Menu.FIRST + 3 , 3 , "保存" );
- editmenu.add(Menu.NONE, Menu.FIRST + 4 , 4 , "撤销" );
- editmenu.add(Menu.NONE, Menu.FIRST + 5 , 5 , "恢复" );
- 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 ;
- }
- return false ;
- }
- }
也可以像例 1 一样通过配置资源文件来得到想要显示的子菜单项。
- 菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu - duanxz
- 菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu
- 笔记10 菜单之 选项菜单optionsMenu、上下文菜单ContextMenu、子菜单SubMenu
- Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)
- Android OptionMenu (选项菜单) 和 ContextMenu (上下文菜单) 、 SubMenu (子菜单)
- OptionsMenu菜单 和 SubMenu创建子菜单
- 子菜单Submenu,快捷菜单Context Menu
- Menu(选项菜单,上下文菜单,弹出式菜单)
- ContextMenu文本菜单(右键菜单)、SubMenu子菜单
- 选项菜单和子菜单(SubMenu)
- 选项菜单+上下文菜单+子菜单
- 选项菜单+上下文菜单+子菜单
- 安卓开发复习笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- Menu 菜单之OptionsMenu
- Android Menu,OptionMenu选项菜单,ContextMenu上下文菜单,Contextual ActionMode,PopUp Menu,PopU pWi ndow
- Android中的Menu功能菜单-OptionsMenu[选项菜单]
- 【Android】选项菜单optionsMenu
- Android高效加载大图、多图解决方案,有效避免程序OOM
- NSString学习笔记
- 如何拷贝指定类型的文件以及如何更改拷贝的文件的扩展名
- android自定义view(实现时钟显示)
- composer一般用法
- 菜单Menu、选项菜单OptionsMenu、上下文菜单ContextMenu、子菜单SubMenu - duanxz
- 关于状态栏颜色与官方新Layout对状态栏颜色的自适应更改
- 数据结构实验之链表二:逆序建立链表
- JavaEE笔记二:JavaBean的概述(2)
- 根据递推公式构造系数矩阵用于快速幂
- Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听
- 在Jupyter notebook和spyder上用python做数据挖掘,安装使用简介和常见错误
- c# Relative Path convert to Absolute Path
- POJ 2955 Brackets (区间DP,括号匹配)