Android的onCreateOptionsMenu()创建菜单Menu

android一共有三种形式的菜单:
            1.选项菜单(optinosMenu)

2.上下文菜单(ContextMenu)

3.子菜单(subMenu)

其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来。

1.Activity菜单机制
 (与dialog类似)

Activity有一套机制来实现对菜单的管理,方法如下:

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    /**
     * 此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例。 返回true则显示该menu,false 则不显示;
     * (只会在第一次初始化菜单时调用) Inflate the menu; this adds items to the action bar
     * if it is present.
     */
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

  @Override
  public boolean onPrepareOptionsMenu(Menu menu) {
    /**
     * 在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用。 同样的,
     * 返回true则显示该menu,false 则不显示; (可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等) TODO
     * Auto-generated method stub
     */
    return super.onPrepareOptionsMenu(menu);
  }

  @Override
  public void onOptionsMenuClosed(Menu menu) {
    /**
     * 每次菜单被关闭时调用. (菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项) TODO
     * Auto-generated method stub
     */
    super.onOptionsMenuClosed(menu);
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    /**
     * 菜单项被点击时调用,也就是菜单项的监听方法。
     * 通过这几个方法,可以得知,对于Activity,同一时间只能显示和监听一个Menu 对象。 TODO Auto-generated
     * method stub
     */
    return super.onOptionsItemSelected(item);
  }

}

2. 添加菜单:

可以在onCreateOptionsMenu或者

onPrepareOptionsMenu方法中来添加菜单
      2.1代码添加:

  menu.add((int groupId, int itemId, int order, charsequence title) .setIcon(drawable ID)

add()方法的四个参数,依次是:

1、组别,如果不分组的话就写Menu.NONE,

2、Id,这个很重要,Android根据这个Id来确定不同的菜单

3、顺序,哪个菜单项在前面由这个参数的大小决定

4、文本,菜单项的显示文本

add()方法返回的是MenuItem对象,调用其setIcon()方法,为相应MenuItem设置Icon
     示例:

 public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(Menu.NONE,  Menu.First+1 , 0, "设置").setIcon(R.drawable.setting);
        return true;
    } 

2.2布局文件添加:

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

调用Activity的getMenuInflater()得到一个MenuInflater,

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate( R.menu.options_menu , menu);
        return true;
    } 

布局文件:
      在res目录下建立一个menu文件夹,并创建布局文件: options_menu.xml

<?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id=" @+id/menu_setting " android:title="设置" android:icon="@drawable/setting"></item>
    </menu> 

  3.菜单项监听:
    只要菜单中的菜单项被点击,都会触发onOptionsItemSelected(MenuItem item)

item参数即为被点击的菜单项,那么需要在此方法内判断哪个Item被点击了,从而实现不同的操作。

对于两种不同的添加菜单方法,判断的方法有一点区别,但本质是一样的。

    3.1代码添加菜单的判断方法
  
使用inflate方法来把布局文件中的定义的菜单 加载给 第二个参数所对应的menu对象

示例:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId()) //得到被点击的item的itemId
        {
        case  Menu.First+1 :  //对应的ID就是在add方法中所设定的Id
            break;
        case  Menu.First+2 :
            break;
        }
        return true;
    } 

  3.2布局文件添加菜单的判断方法:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch(item.getItemId()) //得到被点击的item的itemId
        {
        case  R.id.menu_setting : //这里的Id就是布局文件中定义的Id,在用R.id.XXX的方法获取出来
            break;
        case R.id.menu_info:
            break;
        }
        return true;
    }
时间: 2024-08-08 09:37:28

Android的onCreateOptionsMenu()创建菜单Menu的相关文章

android的onCreateOptionsMenu()创建菜单Menu详解

android一共有三种形式的菜单:     1.选项菜单(optinosMenu)     2.上下文菜单(ContextMenu)     3.子菜单(subMenu)其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来. 1.Activity菜单机制 (与dialog类似)Activity有一套机制来实现对菜单的管理,方法如下: 1.public boolean onCreateOptionsMenu(Menu men

【转】Android的onCreateOptionsMenu()创建菜单Menu详解

原文网址:http://www.linuxidc.com/Linux/2012-02/55500.htm Android一共有三种形式的菜单:            1.选项菜单(optinosMenu)            2.上下文菜单(ContextMenu)            3.子菜单(subMenu)其中最常用的就是选项菜单(optionsMenu), 该菜单在点击 menu 按键 后会在对应的Activity底部显示出来. 1.Activity菜单机制 (与dialog类似)

解决android4.0系统中菜单(Menu)添加Icon无效问题

在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 MenuBuilder做了改变,该类的部分源码如下: 1 public class MenuBuilder implements Menu { 2 ... 3 private boolean mOptionalIconsVisible = false; 4 .... 5 void setOptional

Android菜单Menu的创建

在res目录下的menu文件夹下创建一个main.xml文件,内容如下: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_item" android:title="Add&q

菜单(Menu)的三中创建方式——Android开发之路2

菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu)或系统菜单. 从3.0开始,Android不要求手机设备上必须提供MENU按键.因此Android推荐使用ActionBar来代替Menu. 在不同的版本中菜单显示效果有差异 二.ContextMenu---上下文菜单 三.PopupMenu---弹出式菜单 可以在指定的组件上设置弹出式菜单,默认

Menu创建菜单

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是OptionsMenu 一.概述:这里偷懒,从网上引用的,非原创.引用出处:ForrestWoo public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu . public boolean onOptionsItemSelecte

【Android】6.0 添加Menu菜单组件

1.0 在helloworld项目基础上创建活动SecondActivity: 2.0 其中main.xml: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_item" androi

Android使用DrawerLayout创建左右两个抽屉菜单

在android support.v4 中有一个抽屉视图控件DrawerLayout.使用这个控件,可以生成通过在屏幕上水平滑动打开或者关闭菜单,能给用户一个不错的体验效果. 最近在项目中,设计中有用到这个效果,但是是左右两边都能划出这样的一个菜单效果.经过使用发现,在xml布局中和代码中,几乎是添加添加同样的代码,就可以实现这种作用两种菜单的效果. 效果图如下: 左边拉出菜单: 右边拉出菜单效果: 具体的实现方法如下,结合代码文件,跟大家分享一下: 主页布局文件: <?xml version=

Android的两种菜单

Android子菜单和选项菜单与上下文菜单的实现 菜单在Android开发中必不可少,可是要怎么实现各种菜单呢?是不是很头疼呢?下面我就来介绍一下: 1. 选项菜单和子菜单的实现 选项菜单:最常规的菜单,Android中把它叫做option menu.选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都作为“更多”菜单的子菜单项. 子菜单:Android中点击了子菜单将弹出悬浮窗口显示子菜单项.子菜单不支持嵌套,即子菜单中不能再包括