Android-Menu菜单使用一
创建菜单
在AndroidSDK中,无需从头创建菜单对象。因为一个活动只与一个菜单关联,所以Android会为该活动创建此菜单,然后将它传给Activity类的onCreateOptionsMenu回调。此方法可用于使用一组菜单项填充单个传入的菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//....
return super.onCreateOptionsMenu(menu);
}
当填充菜单项之后,这段代码返回true,使菜单可见。如果返回false,菜单将不可见。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, //菜单组
1, //菜单项id
0, //菜单项排序id
"option1"); //菜单项标题
menu.add(0, 2, 1, "option2");
menu.add(0, 3, 2, "option3");
return super.onCreateOptionsMenu(menu);
}
添加菜单项所必需的第一个参数是菜单组id(int型)。第二个参数是菜单项id,在选择该菜单项时会将它发送给回调函数。第三个参数表示排序id。最后一个参数是菜单项的标题(即显示的菜单项名称)。
除了title参数以外的三个参数:菜单组,菜单项id,菜单项排序id都是可选的,如果不想指定任何id,可以使用Menu.NONE。
使用菜单组
@Override
public boolean onCreateOptionsMenu(Menu menu) {
int group1 = 1;
menu.add(group1, 1, 1, "g1.item1");
menu.add(group1, 2, 2, "g1.item2");
int group2 = 2;
menu.add(group2, 3, 3, "g2.item1");
menu.add(group2, 4, 4, "g2.item2");
return super.onCreateOptionsMenu(menu);
}
这里需要注意,菜单项id和排序id与组是独立的。
操作菜单组的方法:
- removeGroup(id) -- 参数为组id,删除改组的所有菜单项
- setGroupCheckable(id,checkable,exclusive) -- 在选中菜单项时在该菜单相中显示一个勾选标记。当应用到组中时,它将为该组中的所有菜单项启用此功能。如果设置了此方法的独占标志exclusive,那么只允许该组中的一个菜单项处于勾选状态。其他菜单项将保持位选中状态。
- setGroupEnabled(id,boolean enabled) -- 启用或禁用给定组中的菜单项
- setGroupVisible(id,visible) -- 控制改组菜单项是否可见
响应菜单项
- 通过onOptionsItemSelected响应菜单项
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
case 2:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
case 3:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
case 4:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
}
return super.onOptionsItemSelected(item);
}这里的关键模式是通过MenuItem类的getItemId()方法检查菜单项id,然后执行必要的操作。如果onOptionsItemSelected()处理了一个菜单项,它将返回true。此菜单事件将不会进一步传播。对于onOptionsItemSelected()未处理的菜单项回调,onOptionsItemSelected()应该通过super.onOptionsItemSelected()调用父方法。onOptionsItemSelected()的默认实现返回false。
- 通过监听器响应菜单项
- 实现OnMenuClickListener接口。然后获取此实现的一个实例并将其传递给菜单项。当单击菜单项时,该菜单项将调用OnMenuClickListener接口的onMenuItemClick()方法。
class MyResponse implements OnMenuItemClickListener{ @Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
case 2:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
case 3:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
case 4:
Toast.makeText(MainActivity.this, item.getTitle(), 1000).show();
break;
}
return true;
}
}@Override
public boolean onCreateOptionsMenu(Menu menu) { int group1 = 1;
menu.add(group1, 1, 1, "g1.item1");
menu.add(group1, 2, 2, "g1.item2");
int group2 = 2;
menu.add(group2, 3, 3, "g2.item1");
menu.add(group2, 4, 4, "g2.item2"); for (int i = 1; i < menu.size(); i++) {
menu.getItem(i).setOnMenuItemClickListener(new MyResponse());
}
return super.onCreateOptionsMenu(menu);
}- onMenuItemClick方法在调用菜单项时调用。这段代码会在单击菜单项时执行,即使这一操作发生在调用onOptionsItemSelected()方法之前也是如此。如果onMenuItemClick返回true,将不会执行其他任何回调,包括onOptionsItemSelected()回调方法。这意味着,监听器代码的优先级高于onOptionsItemSelected()方法。
- 使用Intent响应菜单项
- 使用MenuItem的setIntent(intent)方法,将菜单项与Intent关联。默认情况下,菜单项没有与之关联的Intent。但是当Intent与菜单项关联,并且没有其他方法处理菜单项时,默认的行为将石使用startActivity(intent)调用该Intent。为此,所有处理程序(尤其是onOptionItemSelected方法)应该为未被处理的菜单项调用父类的onOptionItemSelected()方法。或者可以这样理解:系统为onOptionItemSelected方法提供了首先处理菜单项的机会。这里假设没有与菜单项直接联系的监听器,如果有,监听器将覆盖剩余的菜单项。
- 如果没有重写onOptionsItemSelected()方法,那么Android框架中的基类将执行必要的操作,在菜单项上调用Inten。如果重写了此方法但对此菜单项不感兴趣,那么必须调用父方法,父方法然后会调用Intent。所以基本思路是这样的:要么补充写onOptionsItemSelected()方法,要么重写他并为未处理的菜单项调用父方法。
- 通过onOptionsItemSelected响应菜单项
Android-Menu菜单使用一的更多相关文章
- android menu菜单自动生成
Android提供了一些简单的方法来为应用添加Menu菜单. 提供了三种类型应用菜单: 一.Options Menu:通过Menu按钮调用菜单 1.在/res/目录下新建menu文件夹,用于存储Men ...
- Android Menu菜单使用
如上图右上角,菜单选项的编辑,第一种代码实现方式如下: package com.example.menu; import android.os.Bundle; import android.app.A ...
- Android menu菜单的深入了解。。。
今天补充刚开始的菜单控件,这是基于: https://www.cnblogs.com/aolong/p/12868015.html 里面的菜单写的. 今天学的后面部分是结合昨天的Fragment一起的 ...
- 从零開始学android<Menu菜单组件.三十.>
在Android系统之中.菜单一共同拥有三类:选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 今天我们就用几个样例来分别介绍下菜单的使用 acti ...
- Android动态修改ToolBar的Menu菜单
Android动态修改ToolBar的Menu菜单 效果图 实现 实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,把对应的Action隐藏了. 开始上货 Menu Me ...
- 【Android】详解Android的menu菜单
在软件应用过程中,菜单的存在是必不可少的,我这次讲一下,我对android菜单的一个基础做法吧 Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Men ...
- Android添加Menu菜单
在安卓中添加Menu菜单十分简单. 步骤: 1.在menu文件夹中的main.xml文件中添加要添加的项目. <menu xmlns:android="http://schemas.a ...
- android开发学习——关于activity 和 fragment在toolbar上设置menu菜单
在做一个项目,用的是Android Studio 系统的抽屉源码,但是随着页面的跳转,toolbar的title需要改变,toolbar上的menu菜单也需要改变,在网上找了好久,也尝试了很多,推荐给 ...
- android简洁饼状图组件、圆形Menu菜单、画板画笔应用、答题应用等源码
Android精选源码 android自动监听复制内容源码 Android上简洁轻量级的饼图控件 好看的 Android 圆形 Menu 菜单效果 android画笔.画板功能效果的实现 Androi ...
- Android开发中的menu菜单
复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...
随机推荐
- Linux下安装MySQL以及一些小坑
第一次写博客,各位凑合着看吧(假装有人看). 我这里使用的是centos7. 1.首先打开终端,查看有没有安装过MySQL: [root@localhost lyp]# rpm -qa | grep ...
- solr 加载 停用/扩展词典
startup.bat 停止词典的效果
- 一次对路边饮用水RFID供应机的跑路玩法
"如何成为一个合格的硬件白帽子? 答案: 一个有聪明大脑的你 要有归纳类比和善于用GOOGLE的能力(百度?放弃吧) 善于翻阅和查询相关开发文档和强大的跑路能力." WARNING ...
- day 72 crm(9) 客户关系系统,整体实现,以及自定制路由内容,客户关系梳理
前情提要: crm(9) ,利用stark 组件和,rbac组键的使用, 明确观点: 一:客户关系需求明确 1:客户关系系统,主要是,本业务逻辑主要是 销售就客户关系的业务逻辑, 二: 创建ap ...
- Smart/400开发上手5: Cobol开发标准
ENVIRONMENT DIVISION. CONFIGURATION SECTION.SOURCE-COMPUTER. IBM-AS400.OBJECT-COMPUTER. IBM-AS400. 这 ...
- POJ 2487
#include<iostream> #include<stdio.h> using namespace std; int compare(void const * i,voi ...
- (转)centos 7 Tomcat 8.5 的安装及生产环境的搭建调优
原文:https://www.cnblogs.com/linhankbl/articles/9149804.html#top JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7.8性能对比) ...
- syslog之二:syslog协议及rsyslog服务全解析
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- Linux驱动:I2C驱动编写要点
继续上一篇博文没讲完的内容“针对 RepStart 型i2c设备的驱动模型”,其中涉及的内容有:i2c_client 的注册.i2c_driver 的注册.驱动程序的编写. 一.i2c 设备的注册分析 ...
- SpringSecurity学习之自定义过滤器
我们系统中的认证场景通常比较复杂,比如说用户被锁定无法登录,限制登录IP等.而SpringSecuriy最基本的是基于用户与密码的形式进行认证,由此可知它的一套验证规范根本无法满足业务需要,因此扩展势 ...