Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu)

选项菜单

可以通过两种办法增加选项菜单,一是在menu.xml中添加,该种方式参见Android 资源详解(二) 菜单资源,二是在.java中添加

1、覆盖Activity 的 onCreateOptionsMenu(Menu  menu)方法,当我们第一次打开菜单

时该方法被自动调用。

2、调用Menu的 add()方法添加菜单项(Menultem) ,可以调用Menultem的setIcon()

方法来为菜单项设置图标。.1

3、当菜单项(Menuitem)    被选择时,覆盖 Activity   的 onOptionsItemSelected()方法来 响应事件。

如下代码:public class MainActivity extends Activity {

private static final int menu1=Menu.FIRST;

private static final int menu2=Menu.FIRST+1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0,menu1,0,"OK");

menu.add(0,menu2,0,"CANCEL");

return true;

}

}

上下文菜单

当用户按住屏幕后,弹出的菜单成为上下文菜单。

1、覆盖Activity  的 onCreateContextMenuO方法, 调用 Menu 的 add 方法添加菜单项

2、覆盖onContextItemSelected(MenuIten item) 方法,响应菜单单击事件。

3、调用 registerForContextMenu()方法,为视图注册上下文菜单。当长按视图时,会出现上下文菜单。代码如下:public class MainActivity extends Activity {

private static final int menu1=Menu.FIRST;

private static final int menu2=Menu.FIRST+1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView mytext=(TextView)this.findViewById(R.id.text1);

this.registerForContextMenu(mytext);

}

public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuinfo) {

menu.add(0,menu1,0,"OK");

menu.add(0,menu2,0,"CANCEL");

}

public boolean onContextItemSelected(MenuItem item) {

int id=item.getGroupId();

switch(id) {

case menu1: break;

case menu2:break;

}

return super.onContextItemSelected(item);

}

子菜单

子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows的"文件"菜单中又有"新建"、"打开"、"关闭"等子菜单。Android系统中的子菜单也很多见,如" Settings"  (设置)菜单就有其子菜单。

具体步骤如下:

1、覆盖Activity 的 onCreateOptionsMenu()方法,调用 Menu 的 addSubMenu()方法添

加子菜单项 (SubMenu)。

2、调用SubMenu的add()方法,添加子菜单 (SubMenu) 。

3、覆盖onContextItemSelected()方法,响应菜单单击事件。

代码如下:public class MainActivity extends Activity {

private static final int menu1=Menu.FIRST;

private static final int menu2=Menu.FIRST+1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public boolean onCreateOptionsMenu(Menu menu) {

SubMenu file=menu.addSubMenu("file");//添加子菜单

SubMenu edit=menu.addSubMenu("edit");//添加子菜单

file.add(0,menu1,0,"new");//为子菜单添加菜单选项

file.add(0,menu2,0,"open");

return true;

}

android子视图无菜单,Android 菜单详解相关推荐

  1. ANDROID自定义视图——onMeasure流程,MeasureSpec详解

    简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...

  2. android 子module混淆_Android 矢量图详解

    官方文档 关于 Vector,在官方开发指南中介绍.本文章是由个人翻译官方指南然后添加个人理解完成. 由于个人精力有限,多个渠道发布,排版上可能会有问题,如果影响查看,请移步 Android 开发者家 ...

  3. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  4. Android 各大厂面试题汇总与详解(持续更新)

    介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...

  5. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  6. android自定义view案例,Android自定义View的实现方法实例详解

    一.自绘控件 下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次.新建一个CounterView继承自View,代码如下所示: 可以看到,首先我们在 ...

  7. 微信公众平台菜单编辑php,Vue.js实现微信公众号菜单编辑器步骤详解(上)

    这次给大家带来Vue.js实现微信公众号菜单编辑器步骤详解(上),Vue.js实现微信公众号菜单编辑器的注意事项有哪些,下面就是实战案例,一起来看一下. 学习一段时间Vue.js,于是想尝试着做一个像 ...

  8. android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解

    Android适配底部虚拟按键的方法详解 发布时间:2020-10-09 05:26:12 来源:脚本之家 阅读:171 作者:yuanzhihui123 最近项目进行适配的时候发现部分(如华为手机) ...

  9. Android进阶笔记:Messenger源码详解

    Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...

最新文章

  1. 强人总结的哄老婆秘籍
  2. 实战3--设计管理模块,整合!!!
  3. 旋转矩阵和角速度的一些应用
  4. basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解
  5. 使用yolov5训练自己的目标检测数据集
  6. linux ps 显示不了中文,enscript转txt为ps文件时中文变成乱码
  7. TCP协议特点和TCP报文段
  8. 2019年,有远见的程序员都在关注这些硬核公众号
  9. puzzles —— 111、222、333、444、555、666、777、888、999
  10. [Spring MVC] 取控制器返回的ModelAndView/Map/Model/Request的对象
  11. [MSSQL] 数据库置疑怎么处理?
  12. Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)实现
  13. 一款内网端口映射工具
  14. 浅谈估值模型:回报率r的进阶玩法——Fama-French及PSM(Pastor Stambaugh Model)
  15. 【编程题训练】统计射击比赛成绩
  16. glove.840B.300d、glove.42B.300d、glove.6B下载
  17. 百度云不限速下载(Windows、Linux、Mac平台)
  18. Python挑战游戏( PythonChallenge)闯关之路Level- 3
  19. 基于 OpenSSH 的身份认证与密钥管理
  20. linux 点亮屏幕,按电源键屏幕唤醒和屏幕睡眠流程(从上层到kernel)

热门文章

  1. vue实现页面权限显示_vue实现菜单权限控制
  2. mysqldumpslow mysql慢日志分析工具
  3. mysql修改主键为自增长碰到的错误
  4. Qt 检测第三方软件是否运行、杀死第三方进程
  5. 1.1.3 计算机的分类与发展方向(电子计算机、计算机按指令和数据流分类、计算机发展趋势正向着“两级”分化)
  6. 算法练习day8——190326(队列实现栈、栈实现队列)
  7. linux gt txt内容为空,2gt;/dev/null和gt;/dev/null 2gt;amp;1和2gt;amp;1gt;/dev/null的区别...
  8. 启明云端分享| 盘点 ESP32-S3到底有哪些功能特性
  9. 启明云端分享| 采用 B to B设计的RK3399核心板来了,邮票孔,支持4K、H.265 硬解码;核心板内置 EDP、MIPI-DSI、HDMI、DP 显示接口,带有 2 路 MIPI-CSI
  10. brew install php55redis,Mac下安装LNMP环境