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) { ...
随机推荐
- JVM活学活用——类加载机制
类的实例化过程 有父类的情况 1. 加载父类静态 1.1 为静态属性分配存储空间并赋初始值 1.2 执行静态初始化块和静态初始化语句(从上至下) 2. 加载子类静态 2.1 为静态 ...
- Linux下安装MySQL以及一些小坑
第一次写博客,各位凑合着看吧(假装有人看). 我这里使用的是centos7. 1.首先打开终端,查看有没有安装过MySQL: [root@localhost lyp]# rpm -qa | grep ...
- 深入理解String类
1.String str = "eee" 和String str = new String("eee")的区别 先看一小段代码, public static v ...
- Java Listener中Spring接口注入的使用
在项目中使用Spring通常使用他的依赖注入可以很好的处理,接口与实现类之间的耦合性,但是通常的应用场景中都是Service层和DAO层,或者web层的话, 也是与Strust2来整合,那么如何在Li ...
- pip指定网址安装
用pip安装库的有时候很慢都动不了 ,访问速度很慢,不稳定等缺陷 所以呢为了解决这个问题只能指定网址源下载的话速度就很快了 pip安装默认访问的是https://pypi.Python.org/sim ...
- 让PETSc跑得再快一些
最近做了一个使用PETSc来求解线性方程组(Ax=b)的项目,把其中遇到的一些坑和解决方法记录下来.本文不介绍PETSc如何入门,而是给出一些能让PETSc运行得更快的编程细节.开始我只是简单地修改P ...
- POJ 2725
#include <iostream> #include <string> #include <algorithm> #define MAXN 400005 usi ...
- 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图
面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...
- system表空间空间不足解决办法
场景描述: 系统表空间空间不足,导致应用无法正常连接!!! 环境描述: ORACLE 11G 查看当前表空间的整体使用情况,以及有没有开启自动扩展,以及扩展的最大限制!!! ---tablespace ...
- 全网最详细的Cloudera Hue执行./build/env/bin/supervisor 时出现KeyError: "Couldn't get user id for user hue"的解决办法(图文详解)
不多说,直接上干货! 问题详情 如下: [root@bigdata-pro01 hue--cdh5.12.1]# ./build/env/bin/supervisor Traceback (most ...