本文在同一Activity中介绍添加Menu(菜单)的几种方法,以及对点击菜单选项的事件处理方法

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add("1");//直接用add添加名为“1”的菜单,无需配置menu文件menu.add("2");new MenuInflater(this).inflate(R.menu.main_menu,menu);//通过已经创建好的menu文件来添加菜单return true;}/*通过反射来调用显示icon的方法使得menu的icon正常显示出来*/@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {if(menu != null){if(menu.getClass() == MenuBuilder.class){try{Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible",Boolean.TYPE);m.setAccessible(true);m.invoke(menu,true);}catch(Exception e){e.printStackTrace();}}}return super.onMenuOpened(featureId,menu);}@Overridepublic boolean onOptionsItemSelected(@NonNull MenuItem item) {//通过getItemId()方法来获取点击菜单的Id来进行判断if(item.getItemId()==R.id.item1){Toast.makeText(this,"click item1",Toast.LENGTH_SHORT).show();}//通过getTitle()方法来获取点击菜单的Id的字符串来进行判断if(item.getTitle().toString()=="2"){Toast.makeText(this,"cilck 2",Toast.LENGTH_SHORT).show();}//通过getTitle()方法来取得所选(点击)的菜单选项的对应id,并通过toString()方法转换成字符串switch(item.getTitle().toString()){case "1":Toast.makeText(this,"click 1",Toast.LENGTH_SHORT).show();break;default:break;}return true;}
}

下面这段代码是添加菜单到Activity中的两种用法:

menu.add("1");//直接用add添加名为“1”的菜单,无需配置menu文件
new MenuInflater(this).inflate(R.menu.main_menu,menu);//通过已经创建好的menu文件来添加菜单

下面这段代码是获取点击菜单选项来作对应判断的几种用法:

 //通过getItemId()方法来获取点击菜单的Id来进行判断
if(item.getItemId()==R.id.item1){Toast.makeText(this,"click item1",Toast.LENGTH_SHORT).show();}
//通过getTitle()方法来获取点击菜单的Id的字符串来进行判断
if(item.getTitle().toString()=="2"){Toast.makeText(this,"cilck 2",Toast.LENGTH_SHORT).show();}
//通过getTitle()方法来取得所选(点击)的菜单选项的对应id,并通过toString()方法转换成字符串
switch(item.getTitle().toString())

如下图所示,1、2两个选项是通过add添加的,而菜单1、2、3是通过menu文件的配置来添加进去的

在配置菜单进行输出时,会出现菜单的图标不显示的情况,这是因为系统默认为私有,需要使用反射来进行显示的调用

 /*通过反射来调用显示icon的方法使得menu的icon正常显示出来*/@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {if(menu != null){if(menu.getClass() == MenuBuilder.class){try{Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible",Boolean.TYPE);m.setAccessible(true);m.invoke(menu,true);}catch(Exception e){e.printStackTrace();}}}return super.onMenuOpened(featureId,menu);}

MainActivity布局文件无需去看,因为我们没有在里面添加任何内容,我们只需要看menu配置文件内容即可:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/item1"android:icon="@android:drawable/btn_star_big_on"android:title="菜单1"app:showAsAction="always" /><itemandroid:id="@+id/item2"android:icon="@android:drawable/btn_star_big_on"android:title="菜单2"app:showAsAction="always" /><itemandroid:id="@+id/item3"android:icon="@android:drawable/btn_star_big_on"android:title="菜单3"app:showAsAction="always" />
</menu>

Menu的几种基础用法相关推荐

  1. 网络基础:Ping命令的7种基础用法,掌握了秒变大神!

    现在不管安防工程还是弱电工程,与网络的联系也越来越密切了,网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下Ping命令的7个基础用法,掌 ...

  2. map遍历的三种基础用法

    java中遍历MAP的几种方法  Java代码  Map<String,String> map=new HashMap<String,String>();     map.pu ...

  3. sql中几种删除语句的比较和基础用法

    sql中有三种删除语句 delete.drop.truncate 1.delete 基础用法:delete from table(表名) [where] 用法理解:用于删除有明确定义的数据或者整个表的 ...

  4. Promise基础用法

    什么是Promise? Promise是用来处理异步的; Promise就是承诺,对未来的承诺; 所谓的Promise(承诺),里面保存着未来才会结束的事件的结果; Promise是异步编程的一种解决 ...

  5. pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】

    这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...

  6. dubbo官方文档中文_Pandas中文官方文档:基础用法5

    本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...

  7. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法

    笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...

  8. Array.slice 8 种不同用法

    译者:前端小智 原文:codeburst.io/js-by-examp- 为了保证的可读性,本文采用意译而非直译. 想优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! JS数组slice方法 ...

  9. Promise详解(一) ----基础用法

    什么是Promise Promise是由社区最早提出并实现的,后加入到es6规范中.为更好处理javascript异步问题,用于解决其多次异步回掉嵌套问题.下面先尝试下promise的基础用法吧. 创 ...

最新文章

  1. 雪鹰领主服务器维护,《雪鹰领主》7月14日维护更新公告
  2. 线程回顾Thread
  3. 工厂模式---设计模式(二)
  4. c# 从一个大图里截取图形
  5. FeignClient调用服务及上传文件的注意点及问题
  6. 「PKUSC2018」神仙的游戏 - 题解
  7. JavaScript NaN 属性
  8. 自建服务器同步软件,自建Syncthing中继服务器(私密传输或造福大众)
  9. 测试监视器锁的等待/通知机制
  10. 2017-7-8 OpenStack手工+oz自动制作CentOS 7.3镜像
  11. web项目缺少web组件才能与vs一起运行,带razor语法的 asp.net web pages 2.0.0.1
  12. 计算机的储存容量1kb等于多少byte,1kb等于多少mb
  13. 从步履蹒跚到举重若轻,阿里基础架构如何扛住全球最猛的流量洪峰?
  14. 老年机打不出电话拨号失败服务器无响应,老年机为什么打不出去电话
  15. 蜗窝科技 spin lock (讲的非常不错)
  16. java基础-取余数,取商
  17. QDateTime类
  18. 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数。
  19. 父类(指针、引用)指向子类对象
  20. PHP公司高级面试题2017,php面试题2017

热门文章

  1. vijos1011题解
  2. 【图像处理】OpenCV中的边缘检测
  3. win7 update
  4. python - 验证字符串密码是否符合要求
  5. 服务器的负载是什么意思?有哪些参数衡量?底层原理是什么?
  6. next.js css样式
  7. JUC系列(三) 不安全的集合类
  8. 浏览器访问数据库中的图片路径
  9. 天了噜,玩家竟能写出这样的文章来!
  10. c语言入门——函数的递归