给android应用程序默认的菜单添加一个菜单项关于,android菜单详解

1.菜单的生成

对一个Android应用中的每一个屏幕,也就是说,对每一个Activity类,都会拥

有一个默认菜单。在Activity类中,定义了几个与菜单有关的方法,

供继承于Activity类的子类去重载,从而定制我们自己的菜单。这几个方法为:

public booleanonCreateOptionsMenu(android.view.Menu menu);

public booleanonPrepareOptionsMenu(android.view.Menu menu);

public booleanonOptionsItemSelected(android.view.MenuItem item);

为了生成我们自己的菜单,Android为我们提供了两个时机点。当在Activity类

实例启动时,我们可以通过重载onCreateOptionsMenu()来定制我们的菜单;

另外,也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu

来实现。对于第二种方式,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低

对一个菜单的定义步骤:

1、 创建一个包含文本视图的XML布局文件

2、 创建一个Activity类,其中包含在第一步中定义的布局

3、 设置菜单

4、 向菜单添加一些常规菜单项

5、 向菜单添加一些辅助菜单项

6、 响应菜单项

7、 修改AndroidManifest.xml文件。以显示应用程序正确的标题(一定要修改,这个很容易忘)

Android的菜单分为三种类型:选项菜单(Option Menu)、上下文菜单(Context

Menu)、子菜单(Sub Menu)

一.选项菜单

当用户单击设备上的菜单按钮(Menu),触发事件弹出的菜单就是选项菜单。选

项菜单最多只有六个,超过六个第六个就会自动显示 更多 选项来展示显示。

创建方法:

XML文件

android:icon="@drawable/ic_launcher"

android:title="@string/newFile_title"

/>

android:icon="@drawable/ic_launcher"

android:title="@string/exit_title"

/>

1、覆盖Activity的onCreateOptionsMenu(Menu menu)方法,当我们第一次打

开菜单时调用。

public boolean onCreateOptionsMenu(Menu menu) {

//获取menu文件

MenuInflater inflater = this.getMenuInflater();

//把获取的menu文件实例填充到menu对象中

inflater.inflate(R.menu.options_menu, menu);

return true;

}(基本不可或缺的)

2、调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的

setIcon()方法为菜单项设置图标。

menu.add(1,SAVE, 1, "保存");

menu.add(1, SAVE_AS, 2, "另存为");

menu.add(1, DELETE, 3, "删除");

menu.findItem(SAVE).setIcon(R.drawable.ic_launcher);

第一个参数表示给这个新增的菜单项分配一个分组号;

第二个参数表示给这个新增的菜单项分配一个唯一标识id;

第三个参数表示给这个新增的菜单项分配一个顺序

第四个参数为菜单项的标题。

我们可以通过调用Menu.setItemShown()或者Menu.setGroupShown()方法来显示或隐藏一些菜单项。

3、当菜单项(MenuItem)被选中时,覆盖Acitivy的onOptionsMenuSelected()

方法响应事件。

public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()){

case R.id.newFile:

Toast.makeText(this, "newfile", Toast.LENGTH_SHORT).show();

break;

case R.id.exit:

this.finish();

break;

case DELETE:

menu.removeGroup(2);

menu.removeItem(SAVE_AS);

break;

}

return true;

}

响应事件  点击exit会直接退出;

13686fcead898d56d07dfd6a6e631e2f.png

点击删除按钮直接把SAVE_AS删除   就是另存为

menu.removeItem(SAVE_AS);

59615692a3e9802c7a95cbf784598249.png

二、上下文菜单

当用户长按Activity页面时,弹出的菜单我们称为上下文菜单。我们经常

在Windows中用鼠标右键单击弹出的菜单就是上下文菜单。

1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加

菜单项MenuItem

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

MenuInflater inflater = this.getMenuInflater();

inflater.inflate(R.menu.sub_menu, menu);

super.onCreateContextMenu(menu,v, menuInfo);

}(跟上边相同 add添加也相同)

2、覆盖onContextItemSelected()方法,响应菜单单击事件

public boolean onContextItemSelected(MenuItem item) {

switch(item.getItemId()){

case R.id.sub1:

break;

case R.id.sub2:

break;

}

return super.onContextItemSelected(item);

}

3、调用registerForContextMenu()方法,为视图注册上下文菜单

TextView tv=(TextView) this.findViewById(R.id.idd);

this.registerForContextMenu(tv);(一定要注册)

弹出菜单也可以响应事件

按住所注册的TexrView几秒钟会出现

2d3eff7c5e3b979bda2a6ad26302b5a0.png

三、子菜单

子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows

的“文件”菜单中就有“新建”,“打开”,“关闭”等子菜单。

创建子菜单的方法

1、覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()

方法添加子菜单项

子菜单可以通过XML定义

android:title="menuitem1"/>

android:title="menuitem2">

android:id="@+id/sub1"

android:title="sub1"

>

android:id="@+id/sub2"

android:title="sub2"

>

也可以通过调用SubMenu的add(),添加子菜单项

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = this.getMenuInflater();

inflater.inflate(R.menu.sub_menu, menu);

SubMenu subMenu=menu.addSubMenu(1, SUBMENU, 1, "子菜单");

subMenu.add(20, SUBITEM1, 1, "subitem1");

subMenu.add(20, SUBITEM2, 2, "subitem2");

subMenu.add(30, SUBITEM3, 3, "subitem3");

//         subMenu.setGroupCheckable(20, true, true);

//         subMenu.getItem(0).setCheckable(true);

subMenu.getItem(0).setChecked(true);//选中这个 如果为false;则不选中

subMenu.findItem(SUBITEM3).setCheckable(true);

return true;

}

2、覆盖onCreateItemSelected()方法,响应菜单单击事件

public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()){

case R.id.menuitem1:

Toast.makeText(this, "newfile", Toast.LENGTH_SHORT).show();

break;

case R.id.menuitem2:

this.finish();

break;

case SUBITEM1:

break;

case SUBITEM2:

this.finish();

break;

}

return true;

}

点击子菜单

d5599247f263469d098c0cb40537263f.png

menu.add的方法中的参数:

1.int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,

以便更好的以组的方式管理你的菜单按钮。可以用到的方法有:

removeGroup(id)

setGroupCheckable(id, checkable, exclusive)

setGroupEnabled(id,boolean enabled)

setGroupVisible(id,visible)

2.int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item

ID对应一个Menu中的选项。在后面使用菜单的时候,就是靠这个item ID来判

断,你选中的是哪个选项。

3、int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜

单的显示顺序就是按照add的顺序来显示。

4.String类型的title参数,表示选项中显示的文字。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse Memory Analysis分析Java运行内存情况

获取java进程的dump文件jmap -dump:formatb,file<dumpfile.hprof> <pid>安装Eclipse Memory AnalysisHelp 》 Install New Software输入地址&#xff1a;http://archive.eclipse.org/mat/1.0/update-site/安装点击右侧Open Perspective选Memory Analysis插件&#…

C#对用户密码使用MD5加密与解密

C#中常涉及到对用户密码的加密于解密的算法&#xff0c;其中使用MD5加密是最常见的的实现方式。本文总结了通用的算法并结合了自己的一点小经验&#xff0c;分享给大家。 一.使用16位、32位、64位MD5方法对用户名加密 1&#xff09;16位的MD5加密 ?123456789101112/// <sum…

android默认代码混淆,Android SDK默认混淆配置文件

一.介绍通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等)混淆代码就能删除这些调试信息&#xff0c;并用无意义字符替换所有名字&#xff0c;增加反编译难度&#xff01;ProGuard是一个混淆代码的开源项目&#xff0c;主要作用如下&#xff1a;混淆Obfuscate 用无…

前端学习(2334):angular之内置属性指令ngclass

child.html <p>child4 works!</p><div class"us">我是歌谣</div> <div [ngClass]"currentClass" class"col">我是歌谣</div>child.ts import { Component, OnInit } from angular/core;Component({select…

spring cloud consul整合

本文基于spring cloud Finchley.SR1 consul如何搭建可以看文章consul docker方式搭建 本文章源码位置&#xff1a;https://github.com/wanghongqi/springcloudconsul_test/ 目录 服务端 客户端 测试 服务端 pom.xml <properties><project.build.sourceEncodin…

event android,androidEvent 对 android 事件分发机制的一点个人理解,将事件机制进行了简单化处理,刚方便理解! @codeKK Android开源站...

android 中的事件处理一直以来困扰不少刚刚从事 android 开发的同学&#xff0c;网上也有不少讲解 android 事件分发的文章&#xff0c;然而讲解的都不够简洁&#xff01;现在我将用另一种简洁的方式来讲解 android 事件的分发机制&#xff01;android 的事件分发可以简单的归位…

consul docker方式搭建

目录 获取镜像 运行 集群搭建 官网&#xff1a;https://www.consul.io/ 文档&#xff1a;https://www.consul.io/docs/index.html 获取镜像 docker pull consul:1.3.0 运行 如果已存在dev-consul先移除 docker rm -f dev-consul 创建容器&#xff0c;守护进程方式启动&…

锁屏壁纸开发 Android,Android开发自己的锁屏壁纸

SurfaceView SurfaceHolder MediaPlayer Service BroadcastReceiver KeyguardManager PowerManager思路&#xff1a;启动一个服务&#xff0c;监听灭屏广播&#xff0c;当收到广播的时候&#xff0c;点亮屏幕&#xff0c;禁用锁屏&#xff0c;调用使用SurfaceV…

[转载来之雨松:NGUI研究院之为什么打开界面太慢(十三)]

本文固定链接: http://www.xuanyusong.com/archives/2799转载于:https://www.cnblogs.com/yexiaopeng/p/6591482.html

前端学习(2335):angular之内置结构指令ngif

child.html <p>child4 works!</p><div class"us">我是歌谣</div> <div [ngClass]"currentClass" class"col">我是歌谣</div><div *ngIf"true">aaaa</div> <div *ngIf"false…

centos7 postgresql安装

安装 Install the repository RPM: yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm Install the client packages: yum install postgresql11 Optionally install the server packages: yum install …

android密码可见不可见的光标控制,Android EditText 在设置为输入密码的时候 密码是否可见 光标在最后显示...

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;今天在开发登录注册模块的时候&#xff0c;用EditText实现密码的输入&#xff0c;项目需要密码是可以选择可见或者默认的隐藏模式&#xff0c;很简单&#xff0c;但是第一次遇到就记录下来分享给大家。布局文件and…

centos6 postgresql安装

安装 Install the repository RPM: yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-6-x86_64/pgdg-centos11-11-2.noarch.rpm Install the client packages: yum install postgresql11 Optionally install the server packages: yum install…

l2-006 树的遍历

L2-006. 树的遍历 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越给定一棵二叉树的后序遍历和中序遍历&#xff0c;请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;&l…

Ant Design Pro 2.0/umijs站点配置到非站点根目录下处理

1.config/config.js中 export default {中加上如下&#xff1a; history: hash, //采用hash路由&#xff1a;#/xxx的形式 base:./, publicPath:./, &#xff08;会自动将/static/xxx.jpg之类的和umi.js中的a.p"/"及index.html中window.routerBase中该值进行替换…

android添加商品到购物车,Android使用动画动态添加商品进购物车

本文实例为大家分享了Android添加商品进购物车的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下1、首先展示下效果图2、讲一下思路&#xff0c;小球由加号位置运动到购物车位置&#xff0c;首先得获得这两个点在整个屏幕中的坐标&#xff0c;然后分别计算这两个点的横…

字体小于12px解决办法

width: 100px; height: 30px;-webkit-transform: scale(0.5);margin: -7.5px -25px; 转载于:https://www.cnblogs.com/yghgo/p/6593449.html

前端学习(2338):记录解决问题的一次

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">#f {font-size: 50px;font-family: 幼圆;}#btn {width: 50px;height: 30px;opacity: 0.5;background-color: paleg…