Android开发之menu菜单_Android

 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菜单,希望大家喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android_menu
android_menu菜单
android menu菜单样式、android menu菜单、android menu菜单布局、android menu 子菜单、android menu菜单位置,以便于您获取更多的相关知识。

时间: 2024-09-22 13:21:48

Android开发之menu菜单_Android的相关文章

Android开发之menu菜单

Android系统里面有四种类型的菜单:options menu(选项菜单),context menu(上下文菜单),sub menu(子菜单),Popup menu(弹出菜单). 首先说 选项菜单(OptionsMenu) 一.方法介绍: public booleanonCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu . public booleanonOptionsItemSelected(MenuItem item):选中菜单项后发生的动作.

Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果_Android

BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退.于是就用这种方式实现了,效果还不错.github有详细说明,多余的就不说了. 这个roughike是这个项目的所有者(大神致敬). 我用的是Android studio开发,fragment全部导的V4的包(以为最开始就支持的是v4的,后面也支持了app.fragment). 首先是dependen

Android开发之ContentProvider的使用详解_Android

前言         Content Provider为存储数据和获取数据提供了统一的接口,它可以完成在不同应用程序下的数据共享,而在上一篇文章Android开发之SQLite的使用方法讲到的SQLite只能在同一个程序中共享数据.另外android为一些常见的数据,比如说音频,视频,图片,通讯录等提供了Content Provider,这样我们就可以很方便的对这些类型的数据操作了.使用ContentProvider的好处是开发人员不需要考虑数据内部是怎么存储的,比如说如果我们想利用Conten

Android开发之Service用法实例_Android

本文实例讲述了Android开发之Service用法.分享给大家供大家参考.具体分析如下: Service是一个生命周期较长而且没有界面的程序. 下面通过一个播放mp3的例子来学习. 先看MainActivity.java package com.example.servicetest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view

Android开发之ViewSwitcher用法实例_Android

本文实例讲述了Android开发之ViewSwitcher用法.分享给大家供大家参考,具体如下: android.widget.ViewSwitcher是ViewAnimator的子类,用于在两个View之间切换,但每次只能显示一个View. ViewSwitcher的addView函数的代码如下: /** * {@inheritDoc} * * @throws IllegalStateException if this switcher already contains two childre

Android开发之Animations动画用法实例详解_Android

本文实例讲述了Android开发之Animations动画用法.分享给大家供大家参考,具体如下: 一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 Java Code代码中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸

Android开发之ListView实现Item局部刷新_Android

对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

Android开发之sqlite3命令行简单使用方法_Android

本文实例讲述了Android开发之sqlite3命令行简单使用方法.分享给大家供大家参考,具体如下: 首先需要定位到database所在的目录里面,然后使用命令 sqlite3 databasename(数据库的名字)进入 常用命令: 1. .table     列取该数据库下面的数据表名 2. .schema 或者 .schema + 表名       获取整个或者是单个表的表结构 3. .database 显示该数据库所在的位置 4. .dump 显示数据库的所有信息(包括表结构,表数据)

Android 开发之dataBinding与ListView及事件_Android

2015年Google IO大会分布了DataBinding库,能够更快捷便利的实现MVVM结构模式.但是,通过对DataBinding的学习,其中踩过得坑,今天要在这里记录一下.对于DataBinding一些比较基础的使用,在这里就不在记录了,毕竟现在Google一下,出来很多的教程,而且,android developer官网中,也已经对其基本使用方法做了详细介绍,有英语基础的童鞋,还是去看比较官方的文章.如果英文基础不太好的,https://realm.io/cn/news/data-bi