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

选项菜单是针对整个页面布局的,在这个页面布局的右上方

,点击之后可以会展开选项,供大家选择。

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

定义选项菜单和快捷菜单都是有两种方法,一种是直接在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设置选项菜单和快捷菜单)相关推荐

  1. 让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)

    一.背景 在 如何在Android中实现一个全景图控件(一)中,介绍了项目的一些基本情况(有 demo 演示),如果项目对你有帮助,希望文章赏个赞,项目 star 一下. 项目地址:https://g ...

  2. Android中使用shape来定义控件的显示属性

    参见:  http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html  或者 http://kofi1122.blog.51cto.com/2 ...

  3. android高仿美团筛选控件,Android高仿美团首页分类按钮

    惯例,先上GIF 栗子.gif更新v1.1版本 2017-6-2 11:55:30 详见github 一.使用姿势 1.引入(使用Gradle或者Maven) 1)Gradleallprojects  ...

  4. Android中通过自定义签名控件实现手写签名

    场景 实现手写签名并获取签名照片 注: 博客: BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主 关注公众号 霸道的程序猿 获取编 ...

  5. android 日期下拉选择控件,Android 中日期控件与下拉列表的使用

    1.在一个EditText 中单击一下可以弹出日期对话框: private static int START; private int mYear; private int mMonth; priva ...

  6. android将被代替的控件,Android 控件被忽略的属性

    作者:ivm 参考了 http://www.cnblogs.com/jisheng/archive/2013/01/10/2854088.html 导航栏: 1.TextView autoLink H ...

  7. android加一减一控件,Android的步进器(增加/减少值)控件?

    用于Android的步进器(增/减值)控件? 没有像Android中的Stepper这样的内置控件 但是您可以尝试这种方式 android:layout_width="wrap_conten ...

  8. android多个下拉控件,Android实现支持所有View的通用的下拉刷新控件

    下拉刷新对于一个app来说是必不可少的一个功能,在早期大多数使用的是chrisbanes的PullToRefresh,或是修改自该框架的其他库.而到现在已经有了更多的选择,github上还是有很多体验 ...

  9. android好用的曲线图控件,Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)...

    发现最新的MPAndroidChart和以前版本的使用有一些差距,就写下了现在新版的使用方法 相关文章: Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3. ...

最新文章

  1. 企业分布式微服务云SpringCloud SpringBoot mybatis (九)Spring Boot多数据源配置与使用(JdbcTemplate支持)...
  2. python创建一个有序链表_算法2-2:生成递增有序链表+两个链表合并
  3. P1875 佳佳的魔法药水 (最短路,DP)
  4. 100 万在中国不同地方能活多久?
  5. switch的处理方法
  6. 开发者最讨厌的编程语言:Perl 名列第一,PHP、Objective-C 和 Ruby 都在其中
  7. 第 22 章 Beta
  8. Foxmail配置IMAP账号
  9. Oracle书籍推荐
  10. 图案怎么导入ps?Photoshop图案导入教程
  11. 黑苹果hidp显示不清楚_让黑苹果开启Retina的方法
  12. 每日新闻丨2020年芯片产业即迎来大变局;AMD推出64核128线程HEDT平台
  13. kali安装磊科NW392教程
  14. Vue全家桶基础设施环境搭建
  15. FREERTOS打印错误prvTaskExitError,找原因是如下:
  16. 解决 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...'
  17. 移动硬盘怎么连接服务器,无线路由器加USB硬盘组建属于自己的FTP服务器的方法 隐者黑鹰...
  18. 一个爬虫练习游戏:黑板课爬虫闯关
  19. MOTOMAN机器人网络控制的实现
  20. 面向对象编程、面向服务架构、基于组件开发三种编程模式的区别和适用领域

热门文章

  1. 用计算机名访问计算机,解决局域网用\\计算机名不能访问,用\\ip地址可访问
  2. python多态案例
  3. 一致 先验分布 后验分布_先验概率和后验概率最简单理解
  4. CSS3有哪些新特性
  5. 数据分析师发展的五大问题,一次扫清!
  6. 字符串三种方式切割:split、substring、StringTokenizer
  7. xfce添加快捷图标
  8. 网易2017校园招聘笔试题 回文序列
  9. html 共享文件夹,手把手教你win7系统怎么共享文件夹
  10. 苹果备忘录怎么调字体大小_苹果备忘录误删了怎么恢复?这么好的方法你必须知道...