从零開始学android<Menu菜单组件.三十.>
2016-01-26 11:50
726 查看
在Android系统之中。菜单一共同拥有三类:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。
今天我们就用几个样例来分别介绍下菜单的使用
activity类中长见的方法
MENU的经常用法
MuenItem中经常使用的方法
以上方法是按英文Api翻译,难免有错误之处,欢迎大家指正
1.选项菜单的使用
也能够使用xml文件对菜单进行配置
JAVA文件
2.上下文菜单的使用
接下来我们就使用listview来来进行演示上下文菜单。即长按 选项弹出菜单
就是讲contexMenu与listview相绑定,来对应用户的点击操作
XML文件
相同选项菜单的配置也能够使用xml文件配置
JAVA文件
上下文菜单多用电话本。信息等地方,来实现对所选项的进一步操作
3.子菜单操作
所谓子菜单就是点击一个菜单后不会立刻进行相关事件操作。而是由跳出第二个菜单让用户进行选择。点击二级菜单后再进行事件操作,这就是子菜单
JAVA文件
在android中菜单是不可获取的一部分。掌握好菜单的使用是android开发人员的必备技能.
下节预报
AnalogClock与DigitalClock时钟组件
今天我们就用几个样例来分别介绍下菜单的使用
activity类中长见的方法
1 | public void closeContextMenu() | 普通 | 关闭上下文菜单 |
2 | public void closeOptionsMenu() | 普通 | 关闭选项菜单 |
3 | public boolean onContextItemSelected(MenuItem item) | 普通 | 设置上下文菜单项 |
4 | public void onContextMenuClosed(Menu menu) | 普通 | 上下文菜单关闭时触发 |
5 | public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) | 普通 | 创建上下文菜单 |
6 | public boolean onCreateOptionsMenu(Menu menu) | 普通 | 当用户选择“Menu”button时调用此操作,能够生成一个选项菜单 |
7 | public boolean onMenuItemSelected(int featureId, MenuItem item) | 普通 | 设置选项菜单项 |
8 | public boolean onOptionsItemSelected(MenuItem item) | 普通 | 当一个选项菜单中的某个菜单项被选中时触发此操作 |
9 | public void onOptionsMenuClosed(Menu menu) | 普通 | 当选项菜单关闭时触发此操作 |
10 | public boolean onPrepareOptionsMenu(Menu menu) | 普通 | 当选项菜单显示之前操作触发此操作 |
11 | public void openOptionsMenu() | 普通 | 打开选项菜单 |
12 | public MenuInflater getMenuInflater() | 普通 | 取得MenuInflater类的对象 |
13 | public void registerForContextMenu(View view) | 普通 | 注冊上下文菜单 |
1 | public static final int FIRST | 常量 | 用于定义菜单项的编号 |
2 | public static final int NONE | 常量 | 表示菜单不分组 |
3 | public abstract MenuItem add(int groupId, int itemId, int order, CharSequence title) | 普通 | 此方法用于向菜单之中加入菜单项,參数作用: · groupId:菜单所在的组编号; · itemId:菜单项的ID; · order:菜单的出现顺序; · title:菜单的显示文字。 |
4 | public abstract MenuItem add(int groupId, int itemId, int order, int titleRes) | 普通 | 添加菜单项 |
5 | public abstract SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) | 普通 | 添加子菜单 |
6 | public abstract SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) | 普通 | 添加子菜单 |
7 | public abstract void removeGroup(int groupId) | 普通 | 删除一个菜单组 |
8 | public abstract void removeItem(int id) | 普通 | 删除一个菜单项 |
9 | public abstract void clear() | 普通 | 清空菜单 |
10 | public abstract void close() | 普通 | 关闭菜单 |
11 | public abstract MenuItem getItem(int index) | 普通 | 返回指定的菜单项 |
12 | public abstract int size() | 普通 | 返回菜单项的个数 |
1 | public abstract int getGroupId() | 普通 | 得到菜单组编号 |
2 | public abstract Drawable getIcon() | 普通 | 得到菜单项上的图标 |
3 | public abstract int getItemId() | 普通 | 得到菜单项上的ID |
4 | public abstract int getOrder() | 普通 | 得到菜单项上的编号 |
5 | public abstract SubMenu getSubMenu() | 普通 | 取得子菜单 |
6 | public abstract CharSequence getTitle() | 普通 | 得到菜单项上的标题 |
7 | public abstract boolean isCheckable() | 普通 | 推断菜单项是否可用 |
8 | public abstract boolean isChecked() | 普通 | 推断此菜单项是否被选中 |
9 | public abstract boolean isEnabled() | 普通 | 推断此菜单项是否可用 |
10 | public abstract boolean isVisible() | 普通 | 推断此菜单项是否可见 |
11 | public abstract MenuItem setCheckable(boolean checkable) | 普通 | 设置此菜单项是否可用 |
12 | public abstract MenuItem setChecked(boolean checked) | 普通 | 设置此菜单项是否默认选中 |
13 | public abstract MenuItem setEnabled(boolean enabled) | 普通 | 设置此菜单项是否可用 |
14 | public abstract MenuItem setIcon(Drawable icon) | 普通 | 设置此菜单项的图标 |
15 | public abstract MenuItem setIcon(int iconRes) | 普通 | 设置此菜单项的图标 |
16 | public abstract MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener) | 普通 | 设置此菜单项的监听操作 |
17 | public abstract MenuItem setTitle(CharSequence title) | 普通 | 设置此菜单项的标题 |
18 | public abstract MenuItem setVisible(boolean visible) | 普通 | 设置此菜单项是否可见 |
19 | public abstract ContextMenu.ContextMenuInfo getMenuInfo() | 普通 | 得到菜单中的内容 |
1.选项菜单的使用
<span style="font-size:18px;">package com.example.menu1; import android.os.Bundle; import android.app.Activity; 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); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // 此方法能够调用menu文件进行配置 // getMenuInflater().inflate(R.menu.main, menu); // add(int groupId, int itemId, int order, Charsequence titleRes) // 菜单组ID itemID 指令指向ID 菜单标题 menu.add(1000, 1, 1, "添加").setIcon(android.R.drawable.ic_menu_add); menu.add(1000, 2, 2, "上传").setIcon( android.R.drawable.ic_menu_upload_you_tube); menu.add(1000, 3, 3, "保存").setIcon(android.R.drawable.ic_menu_save); menu.add(1000, 4, 4, "删除").setIcon(android.R.drawable.ic_menu_delete); menu.add(1000, 5, 5, "详情").setIcon( android.R.drawable.ic_menu_info_details); menu.add(1000, 6, 6, "分享").setIcon(android.R.drawable.ic_menu_share); menu.add(1000, 7, 7, "日期").setIcon( android.R.drawable.ic_menu_my_calendar); return true; } @Override // 菜单选项选中处理事件 public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "您点击了添加菜单", 2).show(); break; case 2: Toast.makeText(MainActivity.this, "您点击了上传菜单", 2).show(); break; case 3: Toast.makeText(MainActivity.this, "您点击了保存菜单", 2).show(); break; case 4: Toast.makeText(MainActivity.this, "您点击了删除菜单", 2).show(); break; case 5: Toast.makeText(MainActivity.this, "您点击了详情菜单", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "您点击了分享菜单", 2).show(); break; case 7: Toast.makeText(MainActivity.this, "您点击了日期菜单", 2).show(); break; default: break; } return true; } @Override // 菜单打开时操作 public void openOptionsMenu() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单打开", 2).show(); } @Override // 菜单关闭时操作 public void onOptionsMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override // 菜单准备时操作 public boolean onPrepareOptionsMenu(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "准备操作", 2).show(); return true; } } </span>
也能够使用xml文件对菜单进行配置
<span style="font-size:18px;"><menu xmlns:android="http://schemas.android.com/apk/res/android" > <group android:id="@+id/group1" > <item android:id="@+id/item1" android:title="文件"> </item> <item android:id="@+id/item2" android:title="编辑"> </item> <item android:id="@+id/item3" android:title="查询"> </item> <item android:id="@+id/item4" android:title="project"> </item> <item android:id="@+id/item5" android:title="执行"> </item> <item android:id="@+id/item6" android:title="窗体"> </item> <item android:id="@+id/item7" android:title="帮助"> </item> <item android:id="@+id/item8" android:title="文档"> </item> </group> </menu></span>
JAVA文件
<span style="font-size:18px;">package com.example.menu1; import android.os.Bundle; import android.app.Activity; 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); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // 此方法能够调用menu文件进行配置 getMenuInflater().inflate(R.menu.main, menu); return true; } @Override // 菜单选项选中处理事件 public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "您点击了添加菜单", 2).show(); break; case 2: Toast.makeText(MainActivity.this, "您点击了上传菜单", 2).show(); break; case 3: Toast.makeText(MainActivity.this, "您点击了保存菜单", 2).show(); break; case 4: Toast.makeText(MainActivity.this, "您点击了删除菜单", 2).show(); break; case 5: Toast.makeText(MainActivity.this, "您点击了详情菜单", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "您点击了分享菜单", 2).show(); break; case 7: Toast.makeText(MainActivity.this, "您点击了日期菜单", 2).show(); break; default: break; } return true; } @Override // 菜单打开时操作 public void openOptionsMenu() { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单打开", 2).show(); } @Override // 菜单关闭时操作 public void onOptionsMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override // 菜单准备时操作 public boolean onPrepareOptionsMenu(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "准备操作", 2).show(); return true; } } </span>
2.上下文菜单的使用
接下来我们就使用listview来来进行演示上下文菜单。即长按 选项弹出菜单
就是讲contexMenu与listview相绑定,来对应用户的点击操作
XML文件
<span style="font-size:18px;">package com.example.menu2; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; 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[] = { "房泽龙", "22", "河南大学", "教育科学学院", "河南平顶山", "河南开封" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this);//创建ListView listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, data));//绑定Adapter super.registerForContextMenu(listView);//为listview注冊菜单 super.setContentView(listView); //设置显示的内容 } @Override//事件处理 public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "复制操作", 2).show(); break; case 2: Toast.makeText(MainActivity.this, "详情操作", 2).show(); break; case 3: Toast.makeText(MainActivity.this, "删除操作", 2).show(); break; case 4: Toast.makeText(MainActivity.this, "关闭操作", 2).show(); break; case 5: Toast.makeText(MainActivity.this, "分享操作", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "编辑操作", 2).show(); break; default: break; } return true; } @Override public void onContextMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override//添加菜单操作 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub menu.setHeaderTitle("信息操作"); menu.add(1000, 1, 1, "复制").setIcon(android.R.drawable.ic_menu_agenda); menu.add(1000, 2, 2, "详情").setIcon(android.R.drawable.ic_menu_info_details); menu.add(1000, 3, 3, "删除").setIcon(android.R.drawable.ic_menu_delete); menu.add(1000, 4, 4, "关闭").setIcon(android.R.drawable.ic_menu_close_clear_cancel); menu.add(1000, 5, 5, "分享").setIcon(android.R.drawable.ic_menu_share); menu.add(1000, 6, 6, "编辑").setIcon(android.R.drawable.ic_menu_edit); } } </span>
相同选项菜单的配置也能够使用xml文件配置
<span style="font-size:18px;"> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/group1"> <item android:id="@+id/a1" android:title="复制"></item> <item android:id="@+id/a2" android:title="详情"></item> <item android:id="@+id/a3" android:title="删除"></item> <item android:id="@+id/a4" android:title="分享"></item> <item android:id="@+id/a5" android:title="发送"></item> </group> </menu> </span>
JAVA文件
<span style="font-size:18px;">package com.example.menu3; import android.os.Bundle; import android.app.Activity; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; 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[] = { "房泽龙", "22", "河南大学", "教育科学学院", "河南平顶山", "河南开封" };//数据 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this);//创建listview listView.setAdapter(new ArrayAdapter<String>(this,//设置adapter android.R.layout.simple_expandable_list_item_1, data)); super.registerForContextMenu(listView);//注冊选项菜单 super.setContentView(listView); //设置显示的内容 } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.a1: Toast.makeText(MainActivity.this, "复制操作", 2).show(); break; case R.id.a2: Toast.makeText(MainActivity.this, "详情操作", 2).show(); break; case R.id.a3: Toast.makeText(MainActivity.this, "删除操作", 2).show(); break; case R.id.a4: Toast.makeText(MainActivity.this, "关闭操作", 2).show(); break; case R.id.a5: Toast.makeText(MainActivity.this, "分享操作", 2).show(); break; case 6: Toast.makeText(MainActivity.this, "编辑操作", 2).show(); break; default: break; } return true; } @Override public void onContextMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.getMenuInflater().inflate(R.menu.main, menu);//将菜单与xml文件里的菜单选项相绑定 super.onCreateContextMenu(menu, v, menuInfo);//创建菜单 menu.setHeaderTitle("信息操作");//设置上下文菜单标题 } } </span>
上下文菜单多用电话本。信息等地方,来实现对所选项的进一步操作
3.子菜单操作
所谓子菜单就是点击一个菜单后不会立刻进行相关事件操作。而是由跳出第二个菜单让用户进行选择。点击二级菜单后再进行事件操作,这就是子菜单
1 | public abstract MenuItem getItem() | 普通 | 得到一个子菜单所属的父菜单对象 |
2 | public abstract SubMenu setHeaderIcon(int iconRes) | 普通 | 设置菜单的显示图标 |
3 | public abstract SubMenu setHeaderTitle(int titleRes) | 普通 | 设置子菜单的显示标题 |
4 | public abstract SubMenu setHeaderTitle(CharSequence title) | 普通 | 设置子菜单的显示标题 |
5 | public abstract SubMenu setIcon(int iconRes) | 普通 | 设置每一个子菜单项的图标 |
<span style="font-size:18px;">package com.example.menu4; 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(1000, 1, 1, "新建") ; // 子菜单项 fileMenu.add(1000, 2, 2, "打开") ; // 子菜单项 fileMenu.add(1000, 3, 3, "保存") ; // 子菜单项 editMenu.add(1000, 4, 4, "撤消"); // 子菜单项 editMenu.add(1000, 5, 5, "恢复"); // 子菜单项 return true ; } @Override public boolean onOptionsItemSelected(MenuItem item) { // 选中某个菜单项 switch (item.getItemId()) { // 推断菜单项ID case 1: Toast.makeText(this, "您选择的是“加入联系人”项。", Toast.LENGTH_LONG).show(); break; case 2: Toast.makeText(this, "您选择的是“查看详情”项。", Toast.LENGTH_LONG).show(); break; case 3: Toast.makeText(this, "您选择的是“删除信息”项。", Toast.LENGTH_LONG).show(); break; case 4: Toast.makeText(this, "您选择的是“另存为”项。 ", Toast.LENGTH_LONG).show(); break; case 5: Toast.makeText(this, "您选择的是“编辑”项。", Toast.LENGTH_LONG).show(); break; } return false; } } </span>相同。子菜单的选项也能够使用xml文件进行配置
<span style="font-size:18px;"> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/group1"> <item android:id="@+id/item1" android:title="新建"></item> <item android:id="@+id/item2" android:title="打开"></item> <item android:id="@+id/item3" android:title="保存"></item> </group> </menu> </span>
<span style="font-size:18px;"><? xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <group android:id="@+id/group1"> <item android:id="@+id/item4" android:title="撤销"></item> <item android:id="@+id/item5" android:title="恢复"></item> </group> </menu> </span>
JAVA文件
<span style="font-size:18px;">package com.example.menu5; 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 onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.item1: Toast.makeText(MainActivity.this, "新建", 2).show(); break; case R.id.item2: Toast.makeText(MainActivity.this, "打开", 2).show(); break; case R.id.item3: Toast.makeText(MainActivity.this, "保存", 2).show(); break; case R.id.item4: Toast.makeText(MainActivity.this, "撤销", 2).show(); break; case R.id.item5: Toast.makeText(MainActivity.this, "恢复", 2).show(); break; default: break; } return true; } @Override public void onOptionsMenuClosed(Menu menu) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "菜单关闭", 2).show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. SubMenu fileMenu = menu.addSubMenu("文件"); SubMenu editMenu = menu.addSubMenu("编辑"); getMenuInflater().inflate(R.menu.file_menu, fileMenu);//将文件子菜单与xml绑定 getMenuInflater().inflate(R.menu.edit_menu, editMenu);//将编辑子菜单与xml绑定 return true; } } </span>
在android中菜单是不可获取的一部分。掌握好菜单的使用是android开发人员的必备技能.
下节预报
AnalogClock与DigitalClock时钟组件
相关文章推荐
- 【转】android中最好的瀑布流控件PinterestLikeAdapterView
- android从activity跳转到fragment解决
- 2016这些Android技术会很火
- 2015年Android开发新技术小结
- Android logcat不输出
- AndroidStudio 常用快捷键
- android CheckBox与监听
- android 自定义状态栏和导航栏分析与实现
- Android Service与Activity之间通信的几种方式
- Android JUnit Test——批量运行测试代码
- Android activity加入左右监听手势,页面是一个listview,不影响listview的点击事件
- android 在drawable描边只描一边
- Android Navigation Drawer
- AndroidStudio开启时报错问题
- Android layoutInflate.inflate 方法具体解释,removeView()错误解决
- Android的XML的解析方式介绍
- android上传图片、视频、文件,服务端使用wcf接收
- 技术小白学android
- 第3部分 Android4.0碎片和意图
- Android.mk 详解