一、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 子菜单的更多相关文章

  1. Android开发之Menu:OptionMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)

    菜单的概念,现在已经很普及了.Windows系统.Mac.桌面版Linux.Java Swing等,都有可视化菜单.一.Android平台3种菜单  选项菜单(OptionMenu).上下文菜单(Co ...

  2. Android进阶(二十八)上下文菜单ContextMenu使用案例

    上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...

  3. Android学习笔记之横向二级菜单实现

    PS:元旦来一发. 学习内容: 1.Android二级横向菜单的实现过程.效果如上图...   这种横向的二级菜单在很多的app都有所应用.效果看起来还是非常的美观的.也算是项目需要,自己也就学了一下 ...

  4. android 学习随笔十三(网络:多线程下载)

    多线程断点续传下载1.多线程:快* 原理:抢占服务器资源* 单线程下载:线程从第0个字节开始下,下到最后一个字节,在本地硬盘的临时文件中从第0个字节开始写,写到最后一个字节,下载完成时,临时文件也写完 ...

  5. Android学习(十三) BroadcastReceiver组件(广播)

    一.Broadcast(广播) 是一种广泛应用在应用程序之间传输信息的机制. 二.Broadcast(广播接收器) 是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播 ...

  6. Salesforce LWC学习(二十三) Lightning Message Service 浅谈

    本篇参考: https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist https://d ...

  7. Android学习二_八:Animation的使用(一) (转)

    一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大 ...

  8. android学习二(Activity)

    前面我简单的介绍了android的一些基础知识,当作热身吧,接下来接触android的四大组件的activity活动. 1.活动Activity是是一种保护用户界面的组件,主要用于和用户进行交互. 活 ...

  9. 前端学习(二十三)DOM操作,事件(笔记)

    javascript 组成部分    1.ECMAScript        javascript的核心解释器 2.DOM        Document Object Modle         文 ...

随机推荐

  1. LNMP下安装phpmyadmin的一个小错误解决办法

    环境:ubuntu16.04 + nginx1.10.0 + php7.04 + mysql5.6 安装phpmyadmin之后tail nginx 的错误日志,提示以下: 2016/06/30 15 ...

  2. 一种机制,与js类似

    我们知道,当两个条件进行逻辑与操作的时候,其中任何一个条件为假,则表达式的结果为假.所以,遇到(A 且 B)这种表达式,如果A为假的话,B是不是真假都无所谓了,当遇到一个假条件的时候,程序也就没有必要 ...

  3. mysql 共享空间转为独立表空间

    由于以前的mysql配置为共享表空间,服务器空间不足,清理日志表里的数据后,数据库并没缩小,照成空间浪费,现在修改为独立表空间 #独立表空间innodb_file_per_table=1 #停止事物日 ...

  4. Java遍历list集合的4种方法

    list集合的遍历4种方法: package com.sort; import java.util.ArrayList; import java.util.Iterator; import java. ...

  5. 如何使用python发送邮件

    使用python发送邮件,用的是SMTP协议. 因此在qq邮箱中,要设置开启SMTP服务 只要能开启一个就行 在我们执行程序的时候,会发现邮件被发送过来了 在python中还有一个更简单的第三方模块, ...

  6. 用jsp开发web应用并不是一个高效率的选择

    1.    Android里有办法让js使用java方法像使用自己的方法一样方便,和flex的很相似,flex里面使用java方法就像使用自己的方法一样. 2.    用Flex开发准确的说就是用as ...

  7. 第一章:1-20、试计算以下两种情况的发送时延和传播时延: (1) 数据长度为107bit,数据发送速率为100kbit/s,传播距离为1000km,信号在媒体上 的传播速率为2×108m/s。 (2) 数据长度为103bit,数据发送速率为1Gbit/s,传输距离和信号在媒体上的传播速率同 上。

    <计算机网络>谢希仁著第四版课后习题答案答: 1):发送延迟=107/(100×1000)=100s         传播延迟=1000×1000/(2×108)=5×10-3s=5ms ...

  8. Python的并发并行[1] -> 线程[1] -> 多线程的建立与使用

    多线程的建立与使用 目录 生成线程的三种方法 单线程与多线程对比 守护线程的设置 1 生成线程的三种方法 三种方式分别为: 创建一个Thread实例,传给它一个函数 创建一个Thread实例,传给它一 ...

  9. 又是一年NOIP然鹅我考的是高数(虽然我没打并且内容与NOIP无关)(手动滑稽)

    好长时间没有写过总结了.也是高三结束,自招结束.成功的由国宝变为四害,整个人也是完全放松的,或者说是放肆的. 整个暑假都是游戏睡觉,游戏睡觉,也没有干什么有意义的事.有人说别人都在学习大一课程的时候我 ...

  10. dubbo的中文官网

    https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html