android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)
首先区分一下什么是选项菜单,什么是快捷菜单。
选项菜单是针对整个页面布局的,在这个页面布局的右上方
,点击之后可以会展开选项,供大家选择。
快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之后只需要长摁此控件,菜单列表就会出现,如右:
定义选项菜单和快捷菜单都是有两种方法,一种是直接在activity文件中代码书写,这种方法相对比较繁琐,但是灵活性更高。还有一种是通过菜单布局文件直接定义。但是和之前所有的控件相同,要实现效果都要在activity中书写。
1.选项菜单:
1.1.使用菜单布局文件实现的选项菜单
首先先写出菜单布局文件submeun.xml:
xmlns:android="http://schemas.android.com/apk/res/android">
android:title="Add"
android:icon="@drawable/add"
android:id="@+id/menu_add">
android:title="User"
android:icon="@drawable/user"
android:id="@+id/menu_adduser"/>
android:title="Document"
android:icon="@drawable/doc"
android:id="@+id/menu_add_document"/>
android:title="Save"
android:icon="@drawable/save"
android:id="@+id/menu_save" />
android:title="Delete"
android:icon="@drawable/delete"
android:id="@+id/menu_delete"/>
然后在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_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.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..net/download/qq_38367681/10803684
android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)相关推荐
- 让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)
一.背景 在 如何在Android中实现一个全景图控件(一)中,介绍了项目的一些基本情况(有 demo 演示),如果项目对你有帮助,希望文章赏个赞,项目 star 一下. 项目地址:https://g ...
- Android中使用shape来定义控件的显示属性
参见: http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html 或者 http://kofi1122.blog.51cto.com/2 ...
- android高仿美团筛选控件,Android高仿美团首页分类按钮
惯例,先上GIF 栗子.gif更新v1.1版本 2017-6-2 11:55:30 详见github 一.使用姿势 1.引入(使用Gradle或者Maven) 1)Gradleallprojects ...
- Android中通过自定义签名控件实现手写签名
场景 实现手写签名并获取签名照片 注: 博客: BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主 关注公众号 霸道的程序猿 获取编 ...
- android 日期下拉选择控件,Android 中日期控件与下拉列表的使用
1.在一个EditText 中单击一下可以弹出日期对话框: private static int START; private int mYear; private int mMonth; priva ...
- android将被代替的控件,Android 控件被忽略的属性
作者:ivm 参考了 http://www.cnblogs.com/jisheng/archive/2013/01/10/2854088.html 导航栏: 1.TextView autoLink H ...
- android加一减一控件,Android的步进器(增加/减少值)控件?
用于Android的步进器(增/减值)控件? 没有像Android中的Stepper这样的内置控件 但是您可以尝试这种方式 android:layout_width="wrap_conten ...
- android多个下拉控件,Android实现支持所有View的通用的下拉刷新控件
下拉刷新对于一个app来说是必不可少的一个功能,在早期大多数使用的是chrisbanes的PullToRefresh,或是修改自该框架的其他库.而到现在已经有了更多的选择,github上还是有很多体验 ...
- android好用的曲线图控件,Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)...
发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法 相关文章: Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3. ...
最新文章
- 企业分布式微服务云SpringCloud SpringBoot mybatis (九)Spring Boot多数据源配置与使用(JdbcTemplate支持)...
- python创建一个有序链表_算法2-2:生成递增有序链表+两个链表合并
- P1875 佳佳的魔法药水 (最短路,DP)
- 100 万在中国不同地方能活多久?
- switch的处理方法
- 开发者最讨厌的编程语言:Perl 名列第一,PHP、Objective-C 和 Ruby 都在其中
- 第 22 章 Beta
- Foxmail配置IMAP账号
- Oracle书籍推荐
- 图案怎么导入ps?Photoshop图案导入教程
- 黑苹果hidp显示不清楚_让黑苹果开启Retina的方法
- 每日新闻丨2020年芯片产业即迎来大变局;AMD推出64核128线程HEDT平台
- kali安装磊科NW392教程
- Vue全家桶基础设施环境搭建
- FREERTOS打印错误prvTaskExitError,找原因是如下:
- 解决 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...'
- 移动硬盘怎么连接服务器,无线路由器加USB硬盘组建属于自己的FTP服务器的方法 隐者黑鹰...
- 一个爬虫练习游戏:黑板课爬虫闯关
- MOTOMAN机器人网络控制的实现
- 面向对象编程、面向服务架构、基于组件开发三种编程模式的区别和适用领域
热门文章
- 用计算机名访问计算机,解决局域网用\\计算机名不能访问,用\\ip地址可访问
- python多态案例
- 一致 先验分布 后验分布_先验概率和后验概率最简单理解
- CSS3有哪些新特性
- 数据分析师发展的五大问题,一次扫清!
- 字符串三种方式切割:split、substring、StringTokenizer
- xfce添加快捷图标
- 网易2017校园招聘笔试题 回文序列
- html 共享文件夹,手把手教你win7系统怎么共享文件夹
- 苹果备忘录怎么调字体大小_苹果备忘录误删了怎么恢复?这么好的方法你必须知道...