猴子都能看懂的Android Menu总结
2016-05-09 17:18
417 查看
简单谈谈Android menu菜单的使用,帮助入门的同学。
子菜单:多层菜单的实现方案之一
上下文菜单:android中长按视图控件后出现的菜单
一个简单的代码示例
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/b10dfaa72870430e1e83049f35a11409)
在java代码中创建与监听该menu的点击事件(重写下面两个方法即可)
当然,Item除了可以嵌入到Group中,也可以单独添加到menu中,这里就不演示了。关于Item和group的很多方法,方法名基本就可以明白,这里特别注意几个方法:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/0ea30799384163c015322aaffcb471a1)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/f437b8facc4a670cd724ddfff57f0ba8)
注意,有一个showAsAction方法,用于控制Item的显示方式,使用前请务必添加
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/51fe16a50c85be5b12236846068dc2bc)
Demo:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/8fa7c6a3143ebae063ca9d5f835b2f8b)
添加以上代码即可。参数:(int,int,int,String)分别指groupId,ItemID,orderCaterary和ItemText。第一个直接设置了ItemText单独存在。
切记,在默认隐藏的Item中设置icon是无法显示的
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/0f4b814f40640948a00b81080302a06a)
实现代码:
在onCreateOptionsMenu添加如下代码:
那么,如何在xml中实现如下效果呢?答案是嵌套,没错,代码一看便知
效果图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/bd58260c4fdb6d512f609dee8b5744d8)
效果图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/8520e7e7d451e5f26d0e361564a077f6)
实现流程:
首先注册该View
重写onCreateContextMenu和onContextItemSelected
上下文菜单与选项菜单最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过registerForContextMenu(View view)来指定。
OK,很简单,就不贴代码了,如果对你有用,欢迎下方点赞,有疑问也可以评论的形式提出。
menu主要分类:
选项菜单:最常规的菜单子菜单:多层菜单的实现方案之一
上下文菜单:android中长按视图控件后出现的菜单
选项菜单(OptionMenu)
该菜单默认在右上角显示,有两种布局方式,xml布局和java代码布局,首先看一下在XMl中的布局方式一个简单的代码示例
静态布局(xml):
<group android:id="@+id/group1" android:checkableBehavior="single" android:visible="true"> <item android:id="@+id/item1" android:orderInCategory="100" android:title="111" /> <item android:id="@+id/item2" android:orderInCategory="99" android:title="222" /> </group>
在java代码中创建与监听该menu的点击事件(重写下面两个方法即可)
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_first,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(!item.isChecked()) item.setChecked(true); else item.setChecked(false); return true; }
当然,Item除了可以嵌入到Group中,也可以单独添加到menu中,这里就不演示了。关于Item和group的很多方法,方法名基本就可以明白,这里特别注意几个方法:
android:checkableBehavior="single",该方法设置item的选择类型,还有all和none两个选择类型,对应如图
注意,有一个showAsAction方法,用于控制Item的显示方式,使用前请务必添加
xmlns:app="http://schemas.android.com/apk/res-auto",该方法主要有一下几个选项,看官们一看便知
动态布局(java):
在重写的onCreateOptionsMenu方法中通过menu.add即可添加menu选项。Demo:
menu.add("333"); menu.add(1,1,1,"香蕉"); menu.add(1,2,2,"苹果");
添加以上代码即可。参数:(int,int,int,String)分别指groupId,ItemID,orderCaterary和ItemText。第一个直接设置了ItemText单独存在。
切记,在默认隐藏的Item中设置icon是无法显示的
子菜单(subMenu)
感觉已经被废弃了,在测试中并不会和很久之前一样显示出一个悬浮的子菜单样式,实际效果如下:实现代码:
在onCreateOptionsMenu添加如下代码:
int base = 1; SubMenu subMenu = menu.addSubMenu(base, base+1, Menu.NONE, "水果大全"); subMenu.add(base, base+1, base+1, "苹果"); subMenu.add(base, base+2, base+2, "香蕉"); subMenu.add(base, base+3, base+3, "橘子");
那么,如何在xml中实现如下效果呢?答案是嵌套,没错,代码一看便知
<item android:title="水果大全"> <menu > <item android:title="香蕉"></item> <item android:title="苹果"></item> <item android:title="橘子"></item> </menu> </item>
效果图:
上下文菜单(ContextMenu)
这里以一个TextView的点击时间为例,长按显示上下文菜单效果图:
实现流程:
首先注册该View
TextView textView = (TextView)findViewById(R.id.textView); this.registerForContextMenu(textView);
重写onCreateContextMenu和onContextItemSelected
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.setHeaderTitle("Hello"); menu.setHeaderIcon(R.mipmap.ic_launcher); menu.add(1,1,3,"香蕉"); menu.add(1,2,1,"菠萝"); menu.add(1,3,1,"苹果"); } @Override public boolean onContextItemSelected(MenuItem item) { return super.onContextItemSelected(item); }
上下文菜单与选项菜单最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过registerForContextMenu(View view)来指定。
OK,很简单,就不贴代码了,如果对你有用,欢迎下方点赞,有疑问也可以评论的形式提出。
相关文章推荐
- Android开发自定义控件实现一个饼状图
- 安卓加载视频缩略图,展示于ListView中,完美实现
- androidStudio 自定义控件时在XML使用xmlns自定义命名空间时报错?
- android watchDog 机制
- android两种自定义属性的方法
- Android中View绘制流程
- java.lang.NoSuchMethodError: android.view.View.setBackground
- Android中跨进程通信方式之使用Bundle
- android support 版本相关
- 如何写出低碳环保的 Android 代码
- android---极光推送初步了解
- Monkey测试简介
- FingerprintManager
- Android中Intent的使用
- Android自定义控件View(一)
- 如何向Genymotion虚拟机导入图片或者其他资料--利用Android Studio(二)
- Android通用流行框架大全【整理】
- android OTA升级包制作
- (4.1.40.1)Android得到控件在屏幕中的坐标
- 关于Android 内存泄露整理