Android开发之menu菜单
作者:q610098308 发布时间:2023-04-13 04:10:45
Android系统里面有四种类型的菜单:options menu(选项菜单),context menu(上下文菜单),sub menu(子菜单),Popup menu(弹出菜单)。
首先说 选项菜单(OptionsMenu)
一、方法介绍:
public booleanonCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu。
public booleanonOptionsItemSelected(MenuItem item):选中菜单项后发生的动作。
public voidonOptionsMenuClosed(Menu menu):菜单关闭后发生的动作。
public booleanonPrepareOptionsMenu(Menu menu):选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
public booleanonMenuOpened(int featureId, Menu menu):单打开后发生的动作。
二、默认样式
默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。下面介绍。
1.重载onCreateOptionsMenu(Menu menu)方法
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.main, menu);
menu.add(0,1,1,"设置").setIcon(R.drawable.setting);
menu.add(0,3,3,"设置").setIcon(R.drawable.setting);
menu.add(0,2,2,"下载").setIcon(R.drawable.download);
}
重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。
注意:
大部分手机上边都会有一个“MENU”键,在一个应用安装到手机上之后,可以通过“MENU”显示该应用关联的菜单。
但是,从Android 3.0开始,Android不再要求手机设备上必须提供MENU案件,虽然现在还有很多手机都会提供MENU按键,但是有一部分已经不再提供。在这种情况下,Android推荐使用ActionBar来代替菜单。在以后的博文中我们会介绍Android对ActionBar的支持
4.2上的optionsMenu是放到actionbar上面了,必须要在xml文件中设置showAsAction="always"活着showAsAction="ifRoom"才能在actionbar上显示。只有在actionBar上显示的菜单,才会有图标。要在代码中设置的话,menu.findItem(id).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
2.重载onOptionsItemSelected(MenuItem item)方法为捕捉菜单项事件
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// TODO Auto-generated method stub
if (item.getGroupId() == 0 &&item.getItemId() == 1)
{
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
else
{
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
上下文菜单(ContextMenu)
当用户长按一个控件时时,弹出的菜单我们称为上下文菜单。我们经常在Windows中用鼠标右键单击弹出的菜单就是上下文菜单。
1、重载Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项MenuItem
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
{
menu.add(0, 1, 0, "红色背景");
menu.add(0, 2, 0, "绿色背景");
menu.add(1, 3, 0, "白色背景");
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
}
2、重载onContextItemSelected()方法,响应菜单单击事件
@Override
public boolean onContextItemSelected(MenuItem item)
{
// TODO Auto-generated method stub
switch(item.getItemId()) {
case 1:
myText.setBackgroundColor(Color.RED);
break;
case 2:
myText.setBackgroundColor(Color.GREEN);
break;
case 3:
myText.setBackgroundColor(Color.WHITE);
break;
}
return true;
}
3、重载registerForContextMenu()方法,为视图注册上下文菜单
private TextView myText;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myText = (TextView)findViewById(R.id.mytext);
registerForContextMenu(myText);
}
子菜单(SubMenu)
子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows的“文件”菜单中就有“新建”,“打开”,“关闭”等子菜单。
创建子菜单的方法
1、重载Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项
2、调用SubMenu的add()饭饭,添加子菜单项
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
SubMenu subMenu = menu.addSubMenu(0, 4, 4, "登录/注册");
subMenu.add(1, 1, 1, "登录");
subMenu.add(1, 2, 2, "注册");
return true;
}
3、重载onOptionsItemSelected(MenuItem item)方法为捕捉菜单项事件
这个方法有一个MenuItem参数,可以使用其getTitle和getItemId方法来判断单击的是哪个菜单项
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getTitle().equals("登录"))
{
Log.e("action:","点击了 注册/登录");
}
return super.onOptionsItemSelected(item);
}
SubMenu是Menu的子接口,添加SubMenu后,可以通过SubMenu.add方法添加其子菜单项。在子菜单项上不能显示图像,但可以在子菜单的头部显示图像,不过子菜单项可以带复选框和选项按钮。
注意:子菜单不能再增加子菜单;
弹出菜单(Popup)
该类菜单需要和某个View绑定,当点击该View时在该View的上面或下面(视屏幕空间而定)弹出菜单。
使用方法:
1、建立XML菜单资源文件;
popup.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_edit"
android:orderInCategory="100"
android:showAsAction="never"
android:title="edit"/>
<item
android:id="@+id/action_share"
android:orderInCategory="100"
android:showAsAction="never"
android:title="popup"/>
</menu>
2~5步均可在绑定View的点击事件中实现!
2、建立PopupMenu对象,实例化传入上下文context和绑定的View;
3、使用PopupMenu对象的getMenuInflater().inflate()把XML菜单文件压进来,
4、使用PopupMenu对象自身的setOnMenuItemClickListener设置点击事件;
5、使用PopupMenu对象自身的show显示弹出菜单。
public void showPopuMenu(View v)
{
PopupMenu popup = new PopupMenu(MainActivity.this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.popup, popup.getMenu());
popup.show();
}
以上内容就是小编给大家介绍的Android开发之menu菜单,希望大家喜欢。


猜你喜欢
- 1.对象序列化的介绍(1).NET支持对象序列化的几种方式二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来
- 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24252901很多的A
- 一、前言最近写了个项目,前端还没写,需要部署到服务器给女朋友实现前端,可是不熟悉Linux的我,蹑手蹑脚,真的是每一步都是bug,可谓是步步
- 本文实例讲述了Android网络数据开关用法。分享给大家供大家参考,具体如下:api中没有开放这部分接口。因此大家可以使用这个方法,true
- 有时候可能需要将手机上的一些操作投影出来,比如一些App Demo的展示等。其实,有专门的硬件设备能干这件事儿,但没必要专门为展示个Demo
- 本文实例讲述了java实现统计字符串中字符及子字符串个数的方法。分享给大家供大家参考,具体如下:这里用java实现统计字符串中的字符(包括数
- 本文实例分析了C#接口(Interface)用法。分享给大家供大家参考。具体分析如下:继承"基类"跟继承"接口
- 一、错误处理原理分析使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状
- 这篇文章是博主在通过学习Android Studio的同时,实现service项目中用于背景音乐的实现,邮件的发送用于随堂小测的发送邮件功能
- ☆代码示例:代码块语法遵循标准markdown代码,例如:package cas;import org.htmlparser.Node;im
- 日志过滤对于一个网站日志,首先要对它进行过滤,删除一些不必要的信息,我们通过scala语言来实现,清洗代码如下,代码要通过别的软件打包为ja
- 1、Redis 怎么保证高可用、有哪些集群模式主从复制、哨兵模式、集群模式。2、主从复制在当前最新的 Redis 6.0 中,主从复制的完整
- springboot:整合sa-token一、简介Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、Se
- 一、图示二、MapStructpom文件 <dependency> &n
- Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难
- 1、AndroidManifest.xml中将activity<activity &nb
- 值传递当调用方法进行值传递时,方法内部会产生一个局部变量,在方法内部使用局部变量的值,并不影响传入原来数据的值,包括在使用基本数据类型的包装
- 本文开始做一个网上商城的项目,首先从搭建环境开始,一步步
- private void btnSave_Click(object sender, RoutedEventArgs e)
- 我们通常在使用Java 调用脚本的时候,会使用 Runtime 类如:// 打开浏览器并访问 http://localh