选项菜单+上下文菜单+子菜单

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!


菜单(menu)

普通菜单  OptionMenu

图片8.png

效果图:

点击menu显示

图片1.png

以下代码可实现:

1Activity过代码编写实现(程序生成)

  1. @Override  
  2.         public boolean onCreateOptionsMenu(Menu menu) {                        // 显示菜单  
  3.                 menu.add(Menu.NONE,                                                                         // 菜单不分组  
  4.                                 Menu.FIRST + 1,                                                                 // 菜单项ID  
  5.                                 5,                                                                                                 // 菜单编号  
  6.                                 "删除")                                                                                        // 显示标题  
  7.                                 .setIcon(android.R.drawable.ic_menu_delete);        // 设置图标  
  8. // menu.add(组别ID, 自身ID, 顺序序列, 显示文字)  
  9.                 menu.add(Menu.NONE, Menu.FIRST + 22"保存").setIcon(  
  10.                                 android.R.drawable.ic_menu_save);                                // 设置菜单项  
  11.                 menu.add(Menu.NONE, Menu.FIRST + 36"帮助").setIcon(  
  12.                                 android.R.drawable.ic_menu_help);                                // 设置菜单项  
  13.                 menu.add(Menu.NONE, Menu.FIRST + 41"添加").setIcon(  
  14.                                 android.R.drawable.ic_menu_add);                                // 设置菜单项  
  15.                 menu.add(Menu.NONE, Menu.FIRST + 54"详细").setIcon(  
  16.                                 android.R.drawable.ic_menu_info_details);                // 设置菜单项  
  17.                 menu.add(Menu.NONE, Menu.FIRST + 67"发送").setIcon(  
  18.                                 android.R.drawable.ic_menu_send);                                // 设置菜单项  
  19.                 menu.add(Menu.NONE, Menu.FIRST + 73"编辑").setIcon(  
  20.                                 android.R.drawable.ic_menu_edit);                                // 设置菜单项  
  21.                 return true;                                                                                        // 菜单显示  
  22.         }  
  23.         @Override  
  24.         public boolean onOptionsItemSelected(MenuItem item) {                // 选中某个菜单项  
  25.                 switch (item.getItemId()) {                                                                // 判断菜单项ID  
  26.                 case Menu.FIRST + 1:  
  27.                         Toast.makeText(this"您选择的是“删除菜单”项。", Toast.LENGTH_LONG).show();  
  28.                         break;  
  29.                 case Menu.FIRST + 2:  
  30.                         Toast.makeText(this"您选择的是“保存菜单”项。", Toast.LENGTH_LONG).show();  
  31.                         break;  
  32.                 case Menu.FIRST + 3:  
  33.                         Toast.makeText(this"您选择的是“帮助菜单”项。", Toast.LENGTH_LONG).show();  
  34.                         break;  
  35.                 case Menu.FIRST + 4:  
  36.                         Toast.makeText(this"您选择的是“添加菜单”项。", Toast.LENGTH_LONG).show();  
  37.                         break;  
  38.                 case Menu.FIRST + 5:  
  39.                         Toast.makeText(this"您选择的是“详细菜单”项。", Toast.LENGTH_LONG).show();  
  40.                         break;  
  41.                 case Menu.FIRST + 6:  
  42.                         Toast.makeText(this"您选择的是“发送菜单”项。", Toast.LENGTH_LONG).show();  
  43.                         break;  
  44.                 case Menu.FIRST + 7:  
  45.                         Toast.makeText(this"您选择是“设置菜单”项。", Toast.LENGTH_LONG).show();  
  46.                         break;  
  47.                 }  
  48.                 return false;  
  49.         }  
  50.         @Override  
  51.         public void onOptionsMenuClosed(Menu menu) {                                // 菜单退出时调用  
  52.                 Toast.makeText(this"选项菜单关闭了", Toast.LENGTH_LONG).show();  
  53.         }  
  54.         @Override  
  55.         public boolean onPrepareOptionsMenu(Menu menu) {                        // 菜单显示前调用  
  56.                 Toast.makeText(this,  
  57.                                 "在菜单显示(onCreateOptionsMenu()方法)之前会调用此操作,可以在此操作之中完成一些预处理操作。",Toast.LENGTH_LONG).show();  
  58.                 return true;                                                                                // 调用onCreateOptionsMenu()  
  59.         }  

2通过配置XMl 代码编写实现(配置菜单项)

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.         <item  
  4.                 android:id="@+id/item01"  
  5.                 android:title="添加"  
  6.                 android:icon="@android:drawable/ic_menu_add" />  
  7.         <item  
  8.                 android:id="@+id/item02"  
  9.                 android:title="保存"  
  10.                 android:icon="@android:drawable/ic_menu_save" />  
  11.         <item  
  12.                 android:id="@+id/item03"  
  13.                 android:title="编辑"  
  14.                 android:icon="@android:drawable/ic_menu_edit" />  
  15.         <item  
  16.                 android:id="@+id/item04"  
  17.                 android:title="详细"  
  18.                 android:icon="@android:drawable/ic_menu_info_details" />  
  19.         <item  
  20.                 android:id="@+id/item05"  
  21.                 android:title="删除"  
  22.                 android:icon="@android:drawable/ic_menu_delete" />  
  23.         <item  
  24.                 android:id="@+id/item06"  
  25.                 android:title="发送"  
  26.                 android:icon="@android:drawable/ic_menu_send" />  
  27.         <item  
  28.                 android:id="@+id/item06"  
  29.                 android:title="帮助"  
  30.                 android:icon="@android:drawable/ic_menu_help" />  
  31.         <item  
  32.                 android:id="@+id/item07"  
  33.                 android:title="发送"  
  34.                 android:icon="@android:drawable/ic_menu_send" />  
  35. </menu>  

Activity

  1. public boolean onCreateOptionsMenu(Menu menu) {                        // 显示菜单  
  2.               super.getMenuInflater().inflate(R.menu.mymenu, menu);        // 填充菜单项  
  3.               return true;                                                                                        // 菜单显示、  
  4.       }  

上下文菜单  ContextMenu 

其他操作一样

图片2.png

效果图


以下代码可实现视图以及(功能):

1Activity过代码编写实现(程序生成)

注意 要在Activity onCreate方法里面 super.registerForContextMenu(this.listView) ;        

要给ListView注册上下文菜单对数据长按才会显示上下文菜单       

  1. @Override  
  2.         public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {                                                                                                                        // 显示菜单  
  3.                 super.onCreateContextMenu(menu, v, menuInfo) ;  
  4. menu.setHeaderTitle("联系人操作");//添加头部标题  
  5.                 menu.add(Menu.NONE, Menu.FIRST + 11"复制到电话拨号盘");  
  6.                 menu.add(Menu.NONE, Menu.FIRST + 22"复制到短信拨号盘");  
  7.                 menu.add(Menu.NONE, Menu.FIRST + 33"复制号码");  
  8.         }  
  9.         @Override  
  10.         public boolean onContextItemSelected(MenuItem item) {                        // 选中某个菜单项  
  11.                 // 得到意图  
  12.                   Intent intent = new Intent();  
  13.   
  14.                 // 拿到菜单的信息           
  15. AdapterContextMenuInfo acm = (AdapterContextMenuInfo) item.getMenuInfo();  
  16. // 得到当前点击的位置  
  17.   
  18.                   int position = acm.position;  
  19. // 用当前选择的位置 从适配器里面拿到相对于的cursor  
  20.                    Cursor c = (Cursor)adapter.getItem(position);  
  21. // 从cursor里面拿到当前选择的号码  
  22.                    String number = c.getString(c.getColumnIndex("number"));  
  23.                 switch (item.getItemId()) {  
  24.                 case Menu.FIRST + 1:  
  25. //  复制到电话拨号盘  
  26.                         intent.setAction(Intent.ACTION_DIAL);  
  27.                         intent.setData(Uri.parse("tel:" + number));  
  28.                         startActivity(intent);  
  29.                         break;  
  30.   
  31.                 case Menu.FIRST + 2:  
  32. // 复制到短信拨号盘  
  33.                         intent.setAction(Intent.ACTION_SENDTO);  
  34.                         intent.setData(Uri.parse("smsto:" + number));  
  35.                         startActivity(intent);  
  36.                         break;  
  37.                 case Menu.FIRST + 3:  
  38. // 复制号码通过一个服务要把值设置到粘贴板上面  
  39. ClipboardManager manager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);  
  40.                         manager.setText(number);  
  41.                         break;  
  42.                 default:  
  43.                         break;  
  44.                 }  
  45.                 return true;  
  46.         }  
  47.         @Override  
  48.         public void onContextMenuClosed(Menu menu) {                                        // 菜单退出时调用  
  49.                 Toast.makeText(this"上下文菜单关闭了", Toast.LENGTH_LONG).show();  
  50.         }  

2通过配置XMl 代码编写实现(配置菜单项)

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.         <item  
  4.                 android:id="@+id/item01"  
  5.                 android:title="添加联系人"/>  
  6.         <item  
  7.                 android:id="@+id/item02"  
  8.                 android:title="查看详情"/>  
  9.         <item  
  10.                 android:id="@+id/item03"  
  11.                 android:title="删除信息"/>  
  12.         <item  
  13.                 android:id="@+id/item04"  
  14.                 android:title="另存为"/>  
  15.         <item  
  16.                 android:id="@+id/item05"  
  17.                 android:title="编辑"/>  
  18. </menu>  

Activity

  1. public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo  
  2. menuInfo) {                                                                                                                        // 显示菜单  
  3.                 super.onCreateContextMenu(menu, v, menuInfo) ;  
  4.                 menu.setHeaderTitle("信息操作") ;                                                        // 设置显示信息头  
  5.                 super.getMenuInflater().inflate(R.menu.mymenu, menu);                // 填充菜单项  
  6.         }  

其他方法不做修改


子菜单  SubMenu

图片4.png

效果图:

点击menu

显示
图片5.png

点击文件显示:

图片6.png

点击编辑显示:

图片7.png

通过一下代码可实现:

1Activity过代码编写实现(程序生成)

  1. public boolean onCreateOptionsMenu(Menu menu) {                        // 显示菜单  
  2.                 SubMenu fileMenu = menu.addSubMenu("文件");                                // 子菜单  
  3.                 SubMenu editMenu = menu.addSubMenu("编辑");                                // 子菜单  
  4.                 super.getMenuInflater().inflate(R.menu.mymenu, fileMenu) ;  
  5.                 fileMenu.add(Menu.NONE, Menu.FIRST + 11"新建") ;        // 子菜单项  
  6.                 fileMenu.add(Menu.NONE, Menu.FIRST + 22"打开") ;        // 子菜单项  
  7.                 fileMenu.add(Menu.NONE, Menu.FIRST + 33"保存") ;        // 子菜单项  
  8.                 editMenu.add(Menu.NONE, Menu.FIRST + 44"撤消");                // 子菜单项  
  9.                 editMenu.add(Menu.NONE, Menu.FIRST + 55"恢复");                // 子菜单项  
  10.                 return true ;  
  11.         }  
  12.         @Override  
  13.         public boolean onOptionsItemSelected(MenuItem item) {                // 选中某个菜单项  
  14.                 switch (item.getItemId()) {                                                                // 判断菜单项ID  
  15.                 case Menu.FIRST + 1:  
  16.                         Toast.makeText(this"您选择的是“添加联系人”项。", Toast.LENGTH_LONG).show();  
  17.                         break;  
  18.                 case Menu.FIRST + 2:  
  19.                         Toast.makeText(this"您选择的是“查看详情”项。", Toast.LENGTH_LONG).show();  
  20.                         break;  
  21.                 case Menu.FIRST + 3:  
  22.                         Toast.makeText(this"您选择的是“删除信息”项。", Toast.LENGTH_LONG).show();  
  23.                         break;  
  24.                 case Menu.FIRST + 4:  
  25.                         Toast.makeText(this"您选择的是“另存为”项。", Toast.LENGTH_LONG).show();  
  26.                         break;  
  27.                 case Menu.FIRST + 5:  
  28.                         Toast.makeText(this"您选择的是“编辑”项。", Toast.LENGTH_LONG).show();  
  29.                         break;  
  30.                 }  
  31.                 return false;  
  32.         }  

2通过配置XMl 代码编写实现(配置菜单项)

menu.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.                 <item android:id="@+id/item01" android:title="新建">  
  4.   
  5.                      <menu>  
  6.                         <item android:id="@+id/item05" android:title="新建1"/>  
  7.                         <item android:id="@+id/item06" android:title="新建2"/>                          
  8.                     </menu>  
  9.   
  10.                 </item>  
  11.                 <item android:id="@+id/item02" android:title="保存">  
  12.                     <menu>  
  13.                         <item android:id="@+id/item03" android:title="保存1"/>  
  14.                         <item android:id="@+id/item04" android:title="保存2"/>                          
  15.                     </menu>  
  16.   
  17.   
  18.                 </item>  
  19.   
  20. </menu>  

Activity:       

  1. public boolean onCreateOptionsMenu(Menu menu) {                        // 显示菜单  
  2.   
  3.                super.getMenuInflater().inflate(R.menu.menu, fileMenu) ;  // 填充菜单项  
  4.                 return true ;  
  5.        }   

课后问题:

创建普通菜单的两种方式?

(程序生成)

(配置菜单项)


上下文菜单创建的步骤?1 2 3

注册super.registerForContextMenu(this.listView) ;        

创建onCreateContextMenu

绑定上下文菜单的选项事件onContextItemSelected

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值