转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!
菜单(menu)
普通菜单 OptionMenu
效果图:
点击menu显示
以下代码可实现:
1通Activity过代码编写实现(程序生成)
- @Override
- public boolean onCreateOptionsMenu(Menu menu) { // 显示菜单
- menu.add(Menu.NONE, // 菜单不分组
- Menu.FIRST + 1, // 菜单项ID
- 5, // 菜单编号
- "删除") // 显示标题
- .setIcon(android.R.drawable.ic_menu_delete); // 设置图标
- // menu.add(组别ID, 自身ID, 顺序序列, 显示文字)
- 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()) { // 判断菜单项ID
- 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()
- }
2通过配置XMl 代码编写实现(配置菜单项)
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/item01"
- android:title="添加"
- android:icon="@android:drawable/ic_menu_add" />
- <item
- android:id="@+id/item02"
- android:title="保存"
- android:icon="@android:drawable/ic_menu_save" />
- <item
- android:id="@+id/item03"
- android:title="编辑"
- android:icon="@android:drawable/ic_menu_edit" />
- <item
- android:id="@+id/item04"
- android:title="详细"
- android:icon="@android:drawable/ic_menu_info_details" />
- <item
- android:id="@+id/item05"
- android:title="删除"
- android:icon="@android:drawable/ic_menu_delete" />
- <item
- android:id="@+id/item06"
- android:title="发送"
- android:icon="@android:drawable/ic_menu_send" />
- <item
- android:id="@+id/item06"
- android:title="帮助"
- android:icon="@android:drawable/ic_menu_help" />
- <item
- android:id="@+id/item07"
- android:title="发送"
- android:icon="@android:drawable/ic_menu_send" />
- </menu>
Activity:
- public boolean onCreateOptionsMenu(Menu menu) { // 显示菜单
- super.getMenuInflater().inflate(R.menu.mymenu, menu); // 填充菜单项
- return true; // 菜单显示、
- }
上下文菜单 ContextMenu
其他操作一样
效果图
以下代码可实现视图以及(功能):
1通Activity过代码编写实现(程序生成)
注意 要在Activity onCreate方法里面 super.registerForContextMenu(this.listView) ;
要给ListView注册上下文菜单对数据长按才会显示上下文菜单
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { // 显示菜单
- super.onCreateContextMenu(menu, v, 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, "复制号码");
- }
- @Override
- public boolean onContextItemSelected(MenuItem item) { // 选中某个菜单项
- // 得到意图
- Intent intent = new Intent();
- // 拿到菜单的信息
- AdapterContextMenuInfo acm = (AdapterContextMenuInfo) item.getMenuInfo();
- // 得到当前点击的位置
- int position = acm.position;
- // 用当前选择的位置 从适配器里面拿到相对于的cursor
- Cursor c = (Cursor)adapter.getItem(position);
- // 从cursor里面拿到当前选择的号码
- String number = c.getString(c.getColumnIndex("number"));
- switch (item.getItemId()) {
- case Menu.FIRST + 1:
- // 复制到电话拨号盘
- intent.setAction(Intent.ACTION_DIAL);
- intent.setData(Uri.parse("tel:" + number));
- startActivity(intent);
- break;
- case Menu.FIRST + 2:
- // 复制到短信拨号盘
- intent.setAction(Intent.ACTION_SENDTO);
- intent.setData(Uri.parse("smsto:" + number));
- startActivity(intent);
- break;
- case Menu.FIRST + 3:
- // 复制号码通过一个服务要把值设置到粘贴板上面
- ClipboardManager manager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
- manager.setText(number);
- break;
- default:
- break;
- }
- return true;
- }
- @Override
- public void onContextMenuClosed(Menu menu) { // 菜单退出时调用
- Toast.makeText(this, "上下文菜单关闭了", Toast.LENGTH_LONG).show();
- }
2通过配置XMl 代码编写实现(配置菜单项)
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/item01"
- android:title="添加联系人"/>
- <item
- android:id="@+id/item02"
- android:title="查看详情"/>
- <item
- android:id="@+id/item03"
- android:title="删除信息"/>
- <item
- android:id="@+id/item04"
- android:title="另存为"/>
- <item
- android:id="@+id/item05"
- android:title="编辑"/>
- </menu>
Activity:
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo
- menuInfo) { // 显示菜单
- super.onCreateContextMenu(menu, v, menuInfo) ;
- menu.setHeaderTitle("信息操作") ; // 设置显示信息头
- super.getMenuInflater().inflate(R.menu.mymenu, menu); // 填充菜单项
- }
其他方法不做修改
子菜单 SubMenu
效果图:
点击menu
显示
点击文件显示:
点击编辑显示:
通过一下代码可实现:
1通Activity过代码编写实现(程序生成)
- public boolean onCreateOptionsMenu(Menu menu) { // 显示菜单
- SubMenu fileMenu = menu.addSubMenu("文件"); // 子菜单
- SubMenu editMenu = menu.addSubMenu("编辑"); // 子菜单
- super.getMenuInflater().inflate(R.menu.mymenu, fileMenu) ;
- 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()) { // 判断菜单项ID
- 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;
- }
2通过配置XMl 代码编写实现(配置菜单项)
menu.xml
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:id="@+id/item01" android:title="新建">
- <menu>
- <item android:id="@+id/item05" android:title="新建1"/>
- <item android:id="@+id/item06" android:title="新建2"/>
- </menu>
- </item>
- <item android:id="@+id/item02" android:title="保存">
- <menu>
- <item android:id="@+id/item03" android:title="保存1"/>
- <item android:id="@+id/item04" android:title="保存2"/>
- </menu>
- </item>
- </menu>
Activity:
- public boolean onCreateOptionsMenu(Menu menu) { // 显示菜单
- super.getMenuInflater().inflate(R.menu.menu, fileMenu) ; // 填充菜单项
- return true ;
- }
课后问题:
创建普通菜单的两种方式?
(程序生成)
(配置菜单项)
上下文菜单创建的步骤?1 2 3
注册super.registerForContextMenu(this.listView) ;
创建onCreateContextMenu
绑定上下文菜单的选项事件onContextItemSelected