首先区分一下什么是选项菜单,什么是快捷菜单。

选项菜单是针对整个页面布局的,在这个页面布局的右上方,点击之后可以会展开选项,供大家选择。

快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之后只需要长摁此控件,菜单列表就会出现,如右:

定义选项菜单和快捷菜单都是有两种方法,一种是直接在activity文件中代码书写,这种方法相对比较繁琐,但是灵活性更高。还有一种是通过菜单布局文件直接定义。但是和之前所有的控件相同,要实现效果都要在activity中书写。

1.选项菜单:

1.1.使用菜单布局文件实现的选项菜单

首先在res文件中创建文件夹menu,在文件内写出菜单布局文件submeun.xml:

<?xml version="1.0" encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:title="Add"android:icon="@drawable/add"android:id="@+id/menu_add"><menu><itemandroid:title="User"android:icon="@drawable/user"android:id="@+id/menu_adduser"/><itemandroid:title="Document"android:icon="@drawable/doc"android:id="@+id/menu_add_document"/></menu></item><itemandroid:title="Save"android:icon="@drawable/save"android:id="@+id/menu_save" /><itemandroid:title="Delete"android:icon="@drawable/delete"android:id="@+id/menu_delete"/>
</menu>

然后在MainActivity中实例化这个菜单,代码如下:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{//实例化菜单MenuInflater inflater=getMenuInflater();inflater.inflate(R.menu.submenu ,menu);return true;
}

1.2.在activity中直接创建选项菜单,在MainActivity写如下代码:

//定义菜单项常量
final static int MENU_ADD = Menu.FIRST;
final static int MENU_SAVE = Menu.FIRST + 1;
final static int MENU_DELETE = Menu.FIRST + 2;
final static int MENU_ADDUSER = Menu.FIRST + 3;
final static int MENU_ADDDOCUMENT = Menu.FIRST + 4;@Override
public boolean onCreateOptionsMenu(Menu menu)
{//添加菜单项SubMenu sub = menu.addSubMenu(0, MENU_ADD, 0, "添加").setIcon(R.drawable.add);//menu.add(0, MENU_ADD, 0, "添加").setIcon(R.drawable.add);sub.add(0,MENU_ADDUSER,0,"添加用户").setIcon(R.drawable.user);sub.add(0,MENU_ADDDOCUMENT,1,"添加文档").setIcon(R.drawable.doc);menu.add(0,MENU_SAVE,2,"保存").setIcon(R.drawable.save);menu.add(0,MENU_DELETE,1,"删除").setIcon(R.drawable.delete);return true;
}

1.3怎么给这些选项设置点击事件呢?代码如下:

@Override
public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case MENU_ADD:                  //如果是用菜单布局文件写的,应该改为case R.id.menu_addToast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();isSaved=false;break;case MENU_SAVE:Toast.makeText(MainActivity.this, "保存", Toast.LENGTH_SHORT).show();isSaved=true;break;case MENU_DELETE:Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();break;case MENU_ADDUSER:Toast.makeText(MainActivity.this, "添加用户", Toast.LENGTH_SHORT).show();break;case MENU_ADDDOCUMENT:Toast.makeText(MainActivity.this, "添加文档", Toast.LENGTH_SHORT).show();break;}return super.onOptionsItemSelected(item);
}

1.4我们看到的public boolean onCreateOptionsMenu(Menu menu){}函数,只对菜单初始化一次,那么当外界有些事情触发引起菜单的改变,该怎么设置呢?我们有专门的初始化函数,代码如下:

//记录保存状态
private boolean isSaved=false;//动态修改菜单项
@Override
public boolean onPrepareOptionsMenu(Menu menu){MenuItem item=menu.findItem(MENU_SAVE);if (isSaved){item.setTitle("Save");item.setEnabled(false);   //设置能否点击}else{item.setTitle("Save*");item.setEnabled(true);}return true;
}

2.快捷菜单

2.1.使用菜单布局文件实现的选项菜单

菜单布局文件直接使用上面那个,下面直接看实例化菜单代码,你会发现其实差不多:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView txt=(TextView)findViewById(R.id.txtTest);registerForContextMenu(txt);               //把快捷菜单绑定到这个文本控件上
}@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);//实例化菜单代码MenuInflater inflater=getMenuInflater();inflater.inflate(R.menu.submenu ,menu);
}

2.2.在activity中直接创建快捷菜单,在MainActivity写如下代码:

//定义菜单项常量
final static int MENU_ADD = Menu.FIRST;
final static int MENU_SAVE = Menu.FIRST + 1;
final static int MENU_DELETE = Menu.FIRST + 2;
final static int MENU_ADDUSER = Menu.FIRST + 3;
final static int MENU_ADDDOCUMENT = Menu.FIRST + 4;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView txt=(TextView)findViewById(R.id.txtTest);registerForContextMenu(txt);     //绑定菜单
}@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, v, menuInfo);SubMenu sub = menu.addSubMenu(0, MENU_ADD, 0, "添加").setIcon(R.drawable.add);sub.add(0,MENU_ADDUSER,0,"添加用户").setIcon(R.drawable.user);sub.add(0,MENU_ADDDOCUMENT,1,"添加文档").setIcon(R.drawable.doc);menu.add(0, MENU_SAVE, 2, "保存").setIcon(R.drawable.save);menu.add(0, MENU_DELETE, 1, "删除").setIcon(R.drawable.delete);
}

快捷菜单每次从新点击控件之后都会初始化,所以不需要像上面的public boolean onPrepareOptionsMenu(Menu menu){}函数,初始化内容直接写在creat代码里即可。

2.3怎么给这些选项设置点击事件呢?代码和上面差不多,就是函数名不同,代码如下:

@Override
public boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {case MENU_ADD:Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();isSaved=false;break;case MENU_SAVE:Toast.makeText(MainActivity.this, "保存", Toast.LENGTH_SHORT).show();isSaved=true;break;case MENU_DELETE:Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();break;case MENU_ADDUSER:Toast.makeText(MainActivity.this, "添加用户", Toast.LENGTH_SHORT).show();break;case MENU_ADDDOCUMENT:Toast.makeText(MainActivity.this, "添加文档", Toast.LENGTH_SHORT).show();break;}return super.onContextItemSelected(item);
}

好了,今天就介绍到这,代码在这里:https://download.csdn.net/download/qq_38367681/10803684

Menu控件(Android设置选项菜单和快捷菜单)相关推荐

  1. android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)

    首先区分一下什么是选项菜单,什么是快捷菜单. 选项菜单是针对整个页面布局的,在这个页面布局的右上方 ,点击之后可以会展开选项,供大家选择. 快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之 ...

  2. Menu控件在IE8中子菜单不能正常显示的解决方案(转)

    asp.net的menu控件,可以自动生成下拉菜单,并且提供了很多的样式,在开发网站时,提供了很大的方便. 但是,在ie8中出现了一个问题,就是只能正常显示静态的菜单,而动态的菜单只出现一个白色的背景 ...

  3. ASP.NET Menu控件子菜单弹出导致页面出现滚动条问题

    ASP.NET Menu控件子菜单弹出的时候导致页面CSS属性的Min-Height产生变化,结果是原来全屏的画面,多出了纵滚动条.可以通过如下方法解决: 将ASP.NET控件放置到Table的单元格 ...

  4. Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)

    Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...

  5. android toolbar控件,Android Toolbar控件

    1. Toolbar类 Toolbar是替代ActionBar的产物,低版本可以使用v7兼容包,使用Theme.AppCompat主题,并添加配置. false true 2. Toolbar配置 主 ...

  6. WPF 控件专题 Menu 控件详解

    1.Menu 介绍 Menu 表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素. 该 Menu 控件提供一个项列表,用于指定应用程序的命令或选项. 通常,单击菜 ...

  7. winform/timer控件/权限设置/三级联动

    winform/timer控件/权限设置/三级联动 一.timer控件 组件--timer timer是一个线程,默认可以跨线程访问对象 属性:Enabled--可用性 Interval--间隔时间 ...

  8. 母版中menu控件上传后出现脚本错误

    这几天帮朋友做个小网站,为了网站更容易扩展,所以使用了.menu控件做网站导行.本来在做的时候没出错,可上 传之后却显示不出,动态菜单的部分,并且提示脚本错误.于是乎上网开始找答案,找了大半天.终于找 ...

  9. 如何不使用让menu控件不回发(postback)

    写网站首页程序的导航,要用asp.net2.0 的下menu控件,因为绑定数据库十分方便,不过有个问题,就是我采用的iframe来跳转页面,不想整个首页都跳转,不过发现menu控件没有控制回发的属性, ...

最新文章

  1. ARM汇编学习之寄存器 之PC
  2. SQL Server 动态生成数据库所有表Insert语句
  3. ubuntu下搭载LNMP环境,解决 fpm监听失败
  4. C语言程序设计上机前三题,C语言程序设计(含上机实验与习题解答)
  5. 【转载】三极管,场效应管 工作原理小结
  6. linux 字符设备驱动cdev
  7. android获取电量的方法,在Android中获取电池电量和状态
  8. [译]10-Spring BeanPostProcessor
  9. MyBatis学习总结[5]-动态 SQL
  10. python中itertools groupby函数是干嘛的_python 分组函数 itertools groupby
  11. windows下php mongodb 安装配置使用查询
  12. wincc控件包下载_WinCC中使用控件.pdf
  13. 系统分析师考试大纲(2009版)
  14. 学计算机编程要学什么软件有哪些内容,加工中心自学电脑编程应该学习什么软件...
  15. android usb键盘监听,android设备外接键盘实现监听事件
  16. 第一章 使用SOAPUI测试和开发Web Services Stubs
  17. Linux中Qt环境编译链接依赖opencv库时报错
  18. Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目
  19. python绝技运用python成为顶级pdf_python绝技:运用python成为顶级黑客 中文pdf完整版[42MB]...
  20. 打了10次电话,才总结出来的抖音封号原因分析,能避免大量封号

热门文章

  1. 新星涌现!ICLR 2020华人学者交出亮眼“成绩单”
  2. ring buffer
  3. Python连接数据库pyodbc
  4. 2021-3-26 米斯特安全团队视频笔记二(含PHP)
  5. MCDF验证学习笔记
  6. 【平衡小车制作】01-----让电机转起来
  7. 缘“熟”而起——《乡土中国》读书笔记3600字
  8. commdao.java怎么读,我发帖来求助不知道是不是很天真了
  9. 计算机数值分析教材,计算机数值分析
  10. 招教计算机知识,计算机信息技术招教考试基础知识100个选择题