Menu的几种基础用法
本文在同一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的几种基础用法相关推荐
- 网络基础:Ping命令的7种基础用法,掌握了秒变大神!
现在不管安防工程还是弱电工程,与网络的联系也越来越密切了,网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下Ping命令的7个基础用法,掌 ...
- map遍历的三种基础用法
java中遍历MAP的几种方法 Java代码 Map<String,String> map=new HashMap<String,String>(); map.pu ...
- sql中几种删除语句的比较和基础用法
sql中有三种删除语句 delete.drop.truncate 1.delete 基础用法:delete from table(表名) [where] 用法理解:用于删除有明确定义的数据或者整个表的 ...
- Promise基础用法
什么是Promise? Promise是用来处理异步的; Promise就是承诺,对未来的承诺; 所谓的Promise(承诺),里面保存着未来才会结束的事件的结果; Promise是异步编程的一种解决 ...
- pandas object转float_数据分析篇 | Pandas基础用法6【完结篇】
这是最后一篇,至此Pandas系列终于连载完了,有需要的也可以看看前面6篇,尽请收藏. 数据分析篇 | Pandas 概览 数据分析篇 | Pandas基础用法1数据分析篇 | Pandas基础用法2 ...
- dubbo官方文档中文_Pandas中文官方文档:基础用法5
本文授权转载自Python大咖谈禁止二次转载 大家好,我是老表 阅读文本大概需要 16 分钟 建议从头开始学习,本系列前四篇 Pandas中文官方文档:基础用法1 Pandas中文官方文档:基础用法2 ...
- struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
笔者在之前已经写了一系列的关于RestTemplate的文章,如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层HT ...
- Array.slice 8 种不同用法
译者:前端小智 原文:codeburst.io/js-by-examp- 为了保证的可读性,本文采用意译而非直译. 想优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! JS数组slice方法 ...
- Promise详解(一) ----基础用法
什么是Promise Promise是由社区最早提出并实现的,后加入到es6规范中.为更好处理javascript异步问题,用于解决其多次异步回掉嵌套问题.下面先尝试下promise的基础用法吧. 创 ...
最新文章
- 雪鹰领主服务器维护,《雪鹰领主》7月14日维护更新公告
- 线程回顾Thread
- 工厂模式---设计模式(二)
- c# 从一个大图里截取图形
- FeignClient调用服务及上传文件的注意点及问题
- 「PKUSC2018」神仙的游戏 - 题解
- JavaScript NaN 属性
- 自建服务器同步软件,自建Syncthing中继服务器(私密传输或造福大众)
- 测试监视器锁的等待/通知机制
- 2017-7-8 OpenStack手工+oz自动制作CentOS 7.3镜像
- web项目缺少web组件才能与vs一起运行,带razor语法的 asp.net web pages 2.0.0.1
- 计算机的储存容量1kb等于多少byte,1kb等于多少mb
- 从步履蹒跚到举重若轻,阿里基础架构如何扛住全球最猛的流量洪峰?
- 老年机打不出电话拨号失败服务器无响应,老年机为什么打不出去电话
- 蜗窝科技 spin lock (讲的非常不错)
- java基础-取余数,取商
- QDateTime类
- 一个数如果恰好等于它的因子之和,这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数。
- 父类(指针、引用)指向子类对象
- PHP公司高级面试题2017,php面试题2017