Menu控件(Android设置选项菜单和快捷菜单)
首先区分一下什么是选项菜单,什么是快捷菜单。
选项菜单是针对整个页面布局的,在这个页面布局的右上方,点击之后可以会展开选项,供大家选择。
快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之后只需要长摁此控件,菜单列表就会出现,如右:
定义选项菜单和快捷菜单都是有两种方法,一种是直接在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设置选项菜单和快捷菜单)相关推荐
- android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)
首先区分一下什么是选项菜单,什么是快捷菜单. 选项菜单是针对整个页面布局的,在这个页面布局的右上方 ,点击之后可以会展开选项,供大家选择. 快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之 ...
- Menu控件在IE8中子菜单不能正常显示的解决方案(转)
asp.net的menu控件,可以自动生成下拉菜单,并且提供了很多的样式,在开发网站时,提供了很大的方便. 但是,在ie8中出现了一个问题,就是只能正常显示静态的菜单,而动态的菜单只出现一个白色的背景 ...
- ASP.NET Menu控件子菜单弹出导致页面出现滚动条问题
ASP.NET Menu控件子菜单弹出的时候导致页面CSS属性的Min-Height产生变化,结果是原来全屏的画面,多出了纵滚动条.可以通过如下方法解决: 将ASP.NET控件放置到Table的单元格 ...
- Android 动态创建控件并设置控件的大小之Android屏幕适配攻略(五)
Android 屏幕适配攻略(五)动态创建控件并设置控件的大小 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 flutter中网络请求dio使用分析 视频 ...
- android toolbar控件,Android Toolbar控件
1. Toolbar类 Toolbar是替代ActionBar的产物,低版本可以使用v7兼容包,使用Theme.AppCompat主题,并添加配置. false true 2. Toolbar配置 主 ...
- WPF 控件专题 Menu 控件详解
1.Menu 介绍 Menu 表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素. 该 Menu 控件提供一个项列表,用于指定应用程序的命令或选项. 通常,单击菜 ...
- winform/timer控件/权限设置/三级联动
winform/timer控件/权限设置/三级联动 一.timer控件 组件--timer timer是一个线程,默认可以跨线程访问对象 属性:Enabled--可用性 Interval--间隔时间 ...
- 母版中menu控件上传后出现脚本错误
这几天帮朋友做个小网站,为了网站更容易扩展,所以使用了.menu控件做网站导行.本来在做的时候没出错,可上 传之后却显示不出,动态菜单的部分,并且提示脚本错误.于是乎上网开始找答案,找了大半天.终于找 ...
- 如何不使用让menu控件不回发(postback)
写网站首页程序的导航,要用asp.net2.0 的下menu控件,因为绑定数据库十分方便,不过有个问题,就是我采用的iframe来跳转页面,不想整个首页都跳转,不过发现menu控件没有控制回发的属性, ...
最新文章
- ARM汇编学习之寄存器 之PC
- SQL Server 动态生成数据库所有表Insert语句
- ubuntu下搭载LNMP环境,解决 fpm监听失败
- C语言程序设计上机前三题,C语言程序设计(含上机实验与习题解答)
- 【转载】三极管,场效应管 工作原理小结
- linux 字符设备驱动cdev
- android获取电量的方法,在Android中获取电池电量和状态
- [译]10-Spring BeanPostProcessor
- MyBatis学习总结[5]-动态 SQL
- python中itertools groupby函数是干嘛的_python 分组函数 itertools groupby
- windows下php mongodb 安装配置使用查询
- wincc控件包下载_WinCC中使用控件.pdf
- 系统分析师考试大纲(2009版)
- 学计算机编程要学什么软件有哪些内容,加工中心自学电脑编程应该学习什么软件...
- android usb键盘监听,android设备外接键盘实现监听事件
- 第一章	使用SOAPUI测试和开发Web Services Stubs
- Linux中Qt环境编译链接依赖opencv库时报错
- Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目
- python绝技运用python成为顶级pdf_python绝技:运用python成为顶级黑客 中文pdf完整版[42MB]...
- 打了10次电话,才总结出来的抖音封号原因分析,能避免大量封号