Android学习之菜单
android中包含多种菜单,本例带来的是选项菜单和上下文菜单。
1.选项菜单
在android中,开发者可以在xml文档中部署所要添加的菜单,在后台调用即可。
1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
2
3 <item
4 android:id="@+id/action_add"
5 android:title="添加"
6 android:showAsAction="always|withText"/>
7 <item
8 android:id="@+id/action_save"
9 android:title="保存"
10 android:showAsAction="ifRoom"/>
11 <item
12 android:id="@+id/action_discard"
13 android:title="删除"
14 android:showAsAction="ifRoom"/>
15 <item
16 android:id="@+id/action_delete"
17 android:title="删除"
18 android:showAsAction="ifRoom"/>
19 <item
20 android:id="@+id/action_undo"
21 android:title="撤销"
22 android:showAsAction="ifRoom"/>
23 </menu>
在xml中我们定义了几个常用的菜单,添加、删除、保存等。在xml中定义菜单式通过在<menu/>中定义的。<item/>即为菜单项。android最多可以有六个菜单,超出之后android系统会自动将超出的菜单放在更多的菜单项。
1 public boolean onCreateOptionsMenu(Menu menu) {
2 Inflate the menu; this adds items to the action bar if it is present.
3 MenuInflater inflater = getMenuInflater();
4 inflater.inflate(R.menu.main, menu);
5 mOptionsMenu = menu;
6
7 return super.onCreateOptionsMenu(menu);
8 }
重写onCreateOptionsMenu方法,这里调用已经定义好的menu.xml,可以显示我们刚刚定义的菜单项。
在开发中,菜单也是与事件分不开的。通过onoptionsitemclick,来监听菜单的选中事件。
1 public boolean onOptionsItemSelected(MenuItem menu)
2 {
3
4 switch(menu.getItemId())
5 {
6 case R.id.action_add:
7 Toast.makeText(this, "您点击了添加", Toast.LENGTH_LONG).show();
8 return true;
9 case R.id.action_delete:
10 Toast.makeText(this, "您点击了删除", Toast.LENGTH_LONG).show();
11 return true;
12 case R.id.action_save:
13 Toast.makeText(this, "您点击了保存", Toast.LENGTH_LONG).show();
14 return true;
15 case R.id.action_undo:
16 Toast.makeText(this, "你点击了撤销", Toast.LENGTH_LONG).show();
17 return true;
18 default:
19 return super.onOptionsItemSelected(menu);
20 }
21
22
23
24 }
当然,开发人员也可以动态的添加菜单,不需要在xml中预先写好每一个菜单项。
mOptionsMenu.add(1, 1, 1, "添加");第一个参数:菜单项的分组id;第二个参数:菜单项的id;第三个参数:菜单显示顺序的id,android会根据id进行从左到右,从上到下的排序;第四个参数:菜单项的标题
2.子菜单和上下文菜单
在android中,子菜单和菜单是同一级的,可以通过submenu.add添加子菜单。添加一个带复选框的子菜单
1 public boolean onCreateOptionsMenu(Menu menu) {
2 // Inflate the menu; this adds items to the action bar if it is present.
3 // MenuInflater inflater = getMenuInflater();
4 //inflater.inflate(R.menu.main, menu);
5 // mOptionsMenu = menu;
6 SubMenu filesubmenu=menu.addSubMenu(1,1,2,"文件");
7 MenuItem newMenu=filesubmenu.add(1,2,2,"新建");
8 newMenu.setCheckable(true);
9 MenuItem openMenu=filesubmenu.add(2,3,3,"打开");
10 filesubmenu.setGroupCheckable(2, true, true);
11 return super.onCreateOptionsMenu(menu);
12 }
上下文菜单可以和任意的view关联,而且它必须关联一个view,例如button、textview等。
1 public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInof)
2
3 {
4 super.onCreateContextMenu(menu, view, menuInof);
5 menu.add("上下文菜单");
6 menu.add(0,ITEM1,Menu.NONE,"放大").setCheckable(true).setChecked(true);
7 menu.add(20,ITEM2,Menu.NONE,"缩小");
8 menu.add(20,ITEM3,Menu.NONE,"平移");
9 menu.setGroupCheckable(20, true, true);
10 SubMenu sub=menu.addSubMenu(0,4,Menu.NONE,"子菜单");
11 sub.add("子菜单1");
12 sub.add("子菜单2");
13 }
上下文菜单中可以添加子菜单的。上下文菜单在添加中,需要注册。
Button button9=(Button)findViewById(R.id.button9); registerForContextMenu(button9);
这里将定义的上下文菜单注册到button9中。
如果想实现对上下文菜单选择时间的监听,oncontextitemselected方法实现。
1 public boolean onContextItemSelected(MenuItem item){
2 switch(item.getItemId()){
3 case ITEM1:
4 //在这里添加处理代码
5 Toast.makeText(this, "点击了放大", 5000).show();
6 return true;
7 case ITEM2:
8 //在这里添加处理代码
9 Toast.makeText(this, "点击了缩小", 5000).show();
10 break;
11 case ITEM3:
12 //在这里添加处理代码
13
14 break;
15 }
16 return true;
17 }
- mybatis 针对SQL Server 的 主键id生成策略
- 算法 | 排序算法图形化比较:快速排序、插入排序、选择排序、冒泡排序
- WCF 添加 RESTful 支持,适用于 IIS、Winform、cmd 宿主
- 在CentOS 7上安装Nginx服务器
- 卷积神经网络 | 深度学习笔记1
- 【直播】我的基因组65:看看哪些基因的突变较多,哪些较少
- angular之interceptors拦截器
- js list数据 转 树状 层级 JSON,递归生成树状 层级 JSON
- jquery 图片文件转base64 显示
- AngularJS 用 $http.jsonp 跨域SyntaxError问题
- 简单的java socket 示例
- Hadoop二次开发环境构建
- Android EditText 获得输入焦点 以及requestfocus()失效的问题
- 【直播】我的基因组68:看看哪些基因的突变较多,哪些较少
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- springboot研究:springboot使用swagger自动构建api
- numpy/pandas瞎搞系列(一):OLS,WLS的numpy实现
- redis实战第三篇 redis sentinel安装和部署
- 后浪,谈谈你对jvm性能调优的理解
- Homer预测共表达基因的motif
- redis实战第一篇 安装和使用
- lombok在java项目中的使用
- MySQL 的全文索引.
- Swift Reusable开源库使用
- 面试官:聊聊你读过的开源代码中用到的设计模式
- Swift Moya的简单使用
- 信用风险建模 in Python 系列 5 - 阈值模型概述
- 理解 Kubernetes 的亲和性调度
- CppSQLite - C++ Wrapper for SQLite
- 在.NET Core中使用MongoDB明细教程(3):Skip, Sort, Limit, Projections