Android菜单—Menu
菜单是常用的用户界面元素,在Android系统里提供了3种类型的菜单。
(1)选项菜单(options menu):按设备上Menu 键显示的菜单。
(2)上下文菜单(context menu):长按特定界面view显示,跟具体的 view 绑定在一起,类似PC上鼠标右键菜单。
(3)子菜单(sub menu):以上两种菜单都可以加入子菜单,但子菜单不能再嵌套子菜单。
下面我们通过一个例子来演示3种菜单的基本用法。
菜单的XML资源文件放在res/menu目录下。
optionmenu.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/optionitem1"
4. android:icon="@drawable/icon"
5. android:title="选项1" />
6. <item android:id="@+id/optionitem2"
7. android:icon="@drawable/ic_launcher"
8. android:title="选项2" />
9. <item android:id="@+id/optionitem3"
10. android:icon="@drawable/icon"
11. android:title="子菜单" >
12. <menu>
13. <item android:id="@+id/subitem1"
14. android:title="子菜单项1" />
15. <item android:id="@+id/subitem2"
16. android:title="@string/子菜单项2" />
17. </menu>
18. </item>
19. </menu>
在这个菜单资源文件里,定义了3个菜单项,id分别为optionitem1、optionitem2和optionitem3。每个菜单项item有自己的id、title和icon。
第9~18行的optionitem3菜单项里除了定义了id、title和icon外,还增加了第12~17行所示的子菜单结构。子菜单的item只有id和title,不能设置icon。
上下文菜单资源文件。
contextmenu.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/contextitem1"
5. android:title="上下文菜单子项1">
6. </item>
7. <item
8. android:id="@+id/contextitem2"
9. android:title="上下文菜单子项2">
10. </item>
11. <item
12. android:id="@+id/contextitem3"
13. android:title="上下文菜单子项3">
14. </item>
15. </menu>
上下文菜单的格式和子菜单格式类似,item项没有icon属性。
菜单例子的Java源代码如下。
Mymenu.java
1. @Override
2. public void onCreate(Bundle savedInstanceState) {
3. super.onCreate(savedInstanceState);
4. setContentView(R.layout.main);
5. GridView gridview;
6. String[] titles={"赵1","钱2","张三","李四","王五"};
7. int buf=R.drawable.sample;
8. int[] resIds={buf,buf,buf,buf,buf};
9. gridview=(GridView)this.findViewById(R.id.gridview);
10. gridview.setAdapter(new MyAdapter(titles,resIds));
11. registerForContextMenu(gridview) ;
12. gridview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
13. ......});}
14. @Override
15. public void onCreateContextMenu(ContextMenu menu,View
v,ContextMenu.ContextMenuInfo menuInfo){
16. super.onCreateContextMenu(menu,v,menuInfo);
17. getMenuInflater().inflate(R.menu.contextmenu,menu);
18. }
19. @Override
20. public boolean onContextItemSelected (MenuItem item) {
21. super.onContextItemSelected(item);
22. switch (item.getItemId()) {
23. case R.id.contextitem1:
24. Toast.makeText(this, "上下文菜单子项1", Toast.LENGTH_SHORT).show();
25. break;
26. case R.id.contextitem2:
27. Toast.makeText(this, "上下文菜单子项2", Toast.LENGTH_SHORT).show();
28. break;
29. case R.id.contextitem3:
30. Toast.makeText(this, "上下文菜单子项3", Toast.LENGTH_SHORT).show();
31. break;
32. default:
33. break;
34. }
35. return super.onOptionsItemSelected(item);
36. }
37. @Override
38. public boolean onCreateOptionsMenu(Menu menu) {
39. super.onCreateOptionsMenu(menu);
40. getMenuInflater().inflate(R.menu.optionmenu, menu);
41. return true;
42. }
43. @Override
44. public boolean onOptionsItemSelected(MenuItem item)
45. {
46. switch (item.getItemId())
47. {
48. case R.id.optionitem1:
49. Toast.makeText(this, "单击了选项1", Toast.LENGTH_SHORT).show();
50. return true;
51. case R.id.optionitem2:
52. Toast.makeText(this, "单击了选项2", Toast.LENGTH_SHORT).show();
53. return true;
54. case R.id.optionitem3:
55. Toast.makeText(this, "单击了选项3", Toast.LENGTH_SHORT).show();
56. return true;
57. case R.id.subitem1:
58. Toast.makeText(this, "单击子菜单选项1", Toast.LENGTH_SHORT).show();
59. return true;
60. case R.id.subitem2:
61. Toast.makeText(this, "单击子菜单选项2", Toast.LENGTH_SHORT).show();
62. return true;
63. default:
64. return super.onOptionsItemSelected(item);
65. }}
66. public class MyAdapter extends BaseAdapter {
67. ......}}
第11行registerForContextMenu(gridview),我们为gridview注册了一个上下文菜单,当gridview里的itemview接收到长按事件时就会弹出一个上下文菜单。
第14~18行我们重写了onCreateContextMenu这个创建上下文菜单的回调方法。上下文菜单每次触发显示时都会调用这个方法。
第17行我们使用getMenuInflater().inflate方法装载菜单资源XML文件contextmenu到menu对象里,这个menu对象是由onCreateContextMenu回调函数传入的上下文菜单对象。
第19~36行的onContextItemSelected方法是当用户选择了上下文菜单中的选项时系统回调的方法,系统会传入用户选择的MenuItem对象。通过item.getItemId()我们知道用户选的菜单项的id号。在这里我们用toast显示用户的选择信息。
第37~42行onCreateOptionsMenu是创建选项菜单的回调方法,系统在第一次创建选项菜单时调用该方法。我们重写了该方法将菜单资源optionmenu加载到选项菜单。
第43~65行是选项菜单的item响应回调函数,同样我们通过item.getItemId()获取选项id号。
运行效果图如图10-14、图10-15、图10-16和图10-17所示。
|
▲图10-14 选项菜单图示 ▲图10-15 单击选项2后的图示
|
▲图10-16 子菜单图示 ▲图10-17 上下文菜单图示
转载于:https://www.cnblogs.com/zhoujn/p/4311635.html
Android菜单—Menu相关推荐
- android用户界面之菜单(Menu)教程实例汇总
一.Menu的基本介绍 1.从头学Android之Menu选项菜单 http://www.apkbus.com/android-13930-1-1.html 2.Android 界面之Menu菜单 ...
- Android菜单详解——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
- 系出名门Android(2) - 布局(Layout)和菜单(Menu)
2019独角兽企业重金招聘Python工程师标准>>> 系出名门Android(2) - 布局(Layout)和菜单(Menu) 作者:webabcd 介绍 在 Android 中各 ...
- android 自定义menu背景,Android编程实现自定义系统菜单背景的方法
本文实例讲述了Android编程实现自定义系统菜单背景的方法.分享给大家供大家参考,具体如下: 不多说,上图,见代码. package lab.sodino.menutest; import andr ...
- android 按钮 菜单,(期末要考啊)Android的menu(菜单)按钮的使用
(期末要考啊)Android的menu(菜单)按钮的使用 安卓 Android的菜单按钮 使用xml的方式创建菜单项在res下的menu目录下新建一个main.xml文件,以menu为根节点,添加一个 ...
- android e图标一会有一会没有反应,android解决菜单Menu添加Icon无效问题,让菜单同时显示图标和文字...
今天主要解决在Android 4.0 以上的系统中,在java代码中给菜单Menu动态添加Icon无效问题.本人通过尝试网上给出的涉及到菜单的源码类 MenuBuilder通过反射更改mOptiona ...
- Android开发——菜单(Menu)-——上下文菜单(ContextMenu)、 弹出菜单(PopupMenu)
上下文菜单(ContextMenu) 长按某个view不放,就会在屏幕中间弹出ContextMenu. 一个Activity中间只可能有一个OptionMenu,但一个Activity中间有多个Vie ...
- android 自定义menu 背景颜色,Android中设置Menu菜单的文字颜色为白色
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 开发者交流裙: 188168040 Android中设置Menu菜单的文字颜色为白色,一般情况下,Android中Menu菜单的title文字颜色为黑色, ...
- android菜单(menu)用法
Android手机专门用一个按键"menu"来显示菜单. 要实现菜单功能,首先要通过方法onCreateOptionMenu来创建菜单,创建方法有两种:一种是直接导入有menu的x ...
最新文章
- 阿德莱德计算机专业排名,阿德莱德大学专业排名第几?2019年榜单揭晓!
- python 比较列表相邻元素(找相同或去重)
- SpringMVC的XML配置解析
- 谷歌guava_Google Guava v07范例
- Flutter AppBar 简述
- 在谈判中别无选择的时候,怎么办?
- VI.Multidocument Transactions
- 红外线测温仪方案技术参数
- 2022年G1工业锅炉司炉考试试题及答案
- react-native-beacons-manager在Android上的使用 --工作笔记
- 全部驳回?元宇宙商标申请被国家知识产权局“劝退”
- 输入一串字符,将其中的大写变成小写,若不为大写则原样输出
- 银河麒麟下安装ftp服务
- Zookeeper 3.5.7学习记录(一)——集群的坑
- js实现按键使div移动
- 湖南评副教授职称计算机,2019年职称评审,湖南省高校教师需关注这些问题!...
- 负数的二进制表示及左移功能的验证
- [蓝桥杯]连号区间数[题目详解]
- Java,配置Java环境
- 马毅沈向洋曹颖最新AI综述火了!耗时3月打造,网友:必读论文
热门文章
- python下载安装教程图解-一招解决:各种版本的Python下载安装教程
- python一个月能学成嘛-学过 Python 的人没有告诉你,年入百万有多难
- 小学生python入门-小学生Python入门基础知识有哪些
- python第一次使用教程-Python考试_第一次
- python都能干什么-python都能做什么
- 自学python有哪些网站-python有哪些学习网站
- python统计文件中的中文字数-Python实现统计文本文件字数的方法
- python类装饰器详解-Python装饰器基础概念与用法详解
- python3.7.4-Python3.7.4入门-3函数
- python工程师薪资坑吗-完美起航-20201024——记录一下自己的前端工程师之路