Android学习(二十三)SubMenu 子菜单
一、SubMenu子菜单
和功能菜单相似,但是可以添加子菜单。
二、实现步骤:
1、通过onCreateOptionsMenu方法创建子菜单,可以通过代码动态创建,也可以通过xml进行创建。
2、通过onOptionsItemSelected方法实现点击子菜单的事件。
三、参考代码:
1、通过代码动态创建子菜单:
main.java
package com.example.zhengcheng.submenudemo; import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
//通过代码动态创建子菜单
SubMenu menu_file = menu.addSubMenu("文件"); //创建文件菜单
SubMenu menu_edit = menu.addSubMenu("编辑"); //创建编辑菜单 //为文件菜单创建子菜单
menu_file.add(1, 101, 1, "新建");
menu_file.add(1, 102, 1, "打开");
menu_file.add(1, 103, 1, "保存");
menu_file.setHeaderTitle("文件操作"); //设置菜单标题
menu_file.setHeaderIcon(R.mipmap.ic_launcher); //设置菜单图标 //为编辑菜单创建子菜单
menu_edit.add(2, 101, 1, "复制");
menu_edit.add(2, 102, 1, "粘贴");
menu_edit.add(2, 103, 1, "剪切");
menu_edit.setHeaderTitle("编辑操作"); //设置菜单标题
menu_edit.setHeaderIcon(R.mipmap.ic_launcher); //设置菜单图标
return true;
} /**
* 点击子菜单按钮后触发的操作
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getGroupId()) {
case 1:
//点击了第一组子菜单,对应第一组子菜单下的按钮
switch (item.getItemId()) {
case 101:
Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
break;
case 102:
Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
break;
case 103:
Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
break;
}
break;
case 2:
//点击了第二组子菜单,对应第二组子菜单下的按钮
switch (item.getItemId()) {
case 101:
Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
break;
case 102:
Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
break;
case 103:
Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
break;
}
break;
} return super.onOptionsItemSelected(item);
}
}
2、通过xml创建子菜单
生成子菜单文件
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:title="文件"
app:showAsAction="never">
<menu>
<item
android:id="@+id/menu_new"
android:title="新建"/>
<item
android:id="@+id/menu_open"
android:title="打开" />
<item
android:id="@+id/menu_save"
android:title="保存" />
<item
android:id="@+id/menu_exit"
android:title="退出" />
</menu>
</item>
<item
android:title="编辑"
app:showAsAction="never">
<menu>
<item
android:id="@+id/menu_copy"
android:title="复制" />
<item
android:id="@+id/menu_paste"
android:title="粘贴" />
<item
android:id="@+id/menu_cut"
android:title="剪切" />
</menu>
</item>
</menu>
main.java:后台代码文件
package com.example.zhengcheng.submenudemo; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
//导入xml菜单内容
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
} /**
* 点击子菜单按钮后触发的操作
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) {
case R.id.menu_new:
Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_open:
Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_save:
Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_exit:
Toast.makeText(this, "点击了退出", Toast.LENGTH_SHORT).show();
finish();
break;
case R.id.menu_copy:
Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_paste:
Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_cut:
Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
break;
} return super.onOptionsItemSelected(item);
}
}
Android学习(二十三)SubMenu 子菜单的更多相关文章
- Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)
菜单的概念,现在已经很普及了.Windows系统.Mac.桌面版Linux.Java Swing等,都有可视化菜单.一.Android平台3种菜单 选项菜单(OptionMenu).上下文菜单(Co ...
- Android进阶(二十八)上下文菜单ContextMenu使用案例
上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...
- Android学习笔记之横向二级菜单实现
PS:元旦来一发. 学习内容: 1.Android二级横向菜单的实现过程.效果如上图... 这种横向的二级菜单在很多的app都有所应用.效果看起来还是非常的美观的.也算是项目需要,自己也就学了一下 ...
- android 学习随笔十三(网络:多线程下载)
多线程断点续传下载1.多线程:快* 原理:抢占服务器资源* 单线程下载:线程从第0个字节开始下,下到最后一个字节,在本地硬盘的临时文件中从第0个字节开始写,写到最后一个字节,下载完成时,临时文件也写完 ...
- Android学习(十三) BroadcastReceiver组件(广播)
一.Broadcast(广播) 是一种广泛应用在应用程序之间传输信息的机制. 二.Broadcast(广播接收器) 是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播 ...
- Salesforce LWC学习(二十三) Lightning Message Service 浅谈
本篇参考: https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist https://d ...
- Android学习二_八:Animation的使用(一) (转)
一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大 ...
- android学习二(Activity)
前面我简单的介绍了android的一些基础知识,当作热身吧,接下来接触android的四大组件的activity活动. 1.活动Activity是是一种保护用户界面的组件,主要用于和用户进行交互. 活 ...
- 前端学习(二十三)DOM操作,事件(笔记)
javascript 组成部分 1.ECMAScript javascript的核心解释器 2.DOM Document Object Modle 文 ...
随机推荐
- (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
« CloudStack+XenServer详细部署方案(10):高级网络功能应用 (总结)CentOS Linux 5.x在GPT分区不能引导的解决方法 » 2013-1 11 (原创)Linux下 ...
- Sql Server 事务/回滚
,'test1','test1') commit tran t1 ---提交事务 功能:实现begin tran 和commit tran之间的语句,任一如果出现错误,所有都不执 事务不是有错就回滚 ...
- 理想中的SQL语句条件拼接方式
背景 Orm用过一些,但处理增删改上面做的都不错.但是查询上跟我想要的效果总是差了一点.我想要的效果则是这样,基于某种命名规则进行传参,后台解析器知道命名规则即可知道它要查询什么样的数据. 谈谈我之前 ...
- 【IDEA】IDEA集成Tomcat7插件运行项目
Maven已经是Java的项目管理标配,如何在JavaEE开发使用Maven调用Web应用,是很多同学关心的问题.本文将介绍,Maven如何介绍Tomcat插件. Maven Tomcat插件现在主要 ...
- 解决:laravel出现Please provide a valid cache path.
SVN检出版本库上的项目后,访问首页出现如下提示: Please provide a valid cache path. 解决方法如下: 1.确保storage目录下有如app,framework,v ...
- 计蒜客 18487.Divisions-大数的所有因子个数-Miller_Rabin+Pollard_rho-超快的(大数质因解+因子个数求解公式) (German Collegiate Programming Contest 2015 ACM-ICPC Asia Training League 暑假第一阶段第三场 F)
这一场两个和大数有关的题目,都用到了米勒拉宾算法,有点东西,备忘一下. 题目传送门 F. Divisions 传送门 这个题是求一个数的所有因子个数,但是数据比较大,1e18,所以是大数的题目,正常的 ...
- SSOJ 2316 面积【DFS/Flood Fill】
题目描述 编程计算由“1”号围成的下列图形的面积.面积计算方法是统计1号所围成的闭合曲线中点的数目. 如图所示,在10*10的二维数组中,“1”围住了15个点,因此面积为15. 题目大意:对于给定的1 ...
- Python的网络编程[0] -> socket[0] -> socket 与 TCP / UDP
Socket socket 简述 / socket Abstract 网络进程通信与 socket 网络中进程之间如何通信,首要解决的问题是如何唯一标识一个进程,否则通信无从谈起.在本地可以通过进程 ...
- spoj - Grass Planting(树链剖分模板题)
Grass Planting 题意 给出一棵树,树有边权.每次给出节点 (u, v) ,有两种操作:1. 把 u 到 v 路径上所有边的权值加 1.2. 查询 u 到 v 的权值之和. 分析 如果这些 ...
- JsonConfig处理日期时间
写在前面: 页面发送ajax请求到后台,后台返回对应的json格式数据给前台页面进行数据展示,如果json数据中含有日期时间,就需要对日期进行处理 下面是相关的代码部分 JsonConfig json ...