zoukankan      html  css  js  c++  java
  • Menu之选项菜单

      Android有三种形式的菜单:选项菜单(optionMenu)、上下文菜单(ContextMenu)、子菜单(subMenu)。最常用的是选项菜单,该菜单在点击menu按键后会在对应的Activity底部显示出来。每个Activity关联一个且唯一的一个Menu对象。

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

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

      1.public boolean onCreateOptionMenu(Menu menu)

        此方法用于初始化菜单,其中menu参数就是将要显示的菜单选项。返回true就显示该menu,false不显示。该方法只会在初始化菜单时调用且只调用一次。

      2.public boolean onprepareOptionsMenu(Menu menu)

        在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单每次被显示前被调用。返回true就显示该menu,false不显示。通过此方法可以动态改变菜单的内容,比如加载不同的菜单等。

      3.public void onOptionsMenuClosed(Menu menu)

        每次菜单被关闭时调用,菜单被关闭有三种情况:menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项。

      4.public boolean onOptionsItemSelected(MenuItem item)

        菜单项被点击时调用,也就是菜单项的监听方法。

     二、添加选项菜单

        可以在onCreateOptionMenu或者onPrepareOptionsMenu方法中添加选项菜单

        通过此方法来添加:menu.add(int groupId,int itemId,int order,charsequence title).setIcon(drawable id)

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

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

        2.ID, Android根据这个ID来确定不同的菜单,通常以Menu.FIRST作为偏移量基准。

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

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

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

     三、添加布局文件

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

        调用Activity的getMenuInflater()得到MenuInflater,再使用inflate方法把布局文件中定义的菜单加载给第二个参数对应的menu对象

       布局文件:

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

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

     四、菜单项监听:

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

       item参数即为被点击的菜单项,需要在此方法内判断哪个Item被点击了,从而实现不同的操作。对于上面(二、三)两种不同添加菜单的方法,判断的方法有一点区别,但本质是一样的。

      1.代码添加菜单的判断方法

     1 public boolean onOptionsItemSelected(MenuItem item){
     2     switch(item.getItemId()//得到被点击的item的itemId
     3         {
     4             case Menu.First:
     5               ......
     6                  break;    
     7             case Menu.First+1:
     8                  ......
     9                  break; 
    10             default:
    11             //对没有处理的事件,交给父类来处理
    12              return super.onOptionsItemSelected(item);
    13          }
    14     //返回true表示处理完菜单项的事件了,不需要将该事件继续传播下去了   
    15         return true;
    16 
    17 }        

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

        只需将上面的代码中的case之后的int值改为布局文件中定义的id即可。例如:case R.id.menu.setting:   case  R.id.menu_info:

    以上主要参考自:http://www.linuxidc.com/Linux/2012-02/55500.htm

  • 相关阅读:
    2.16.8.内核启动的C语言阶段5
    2.16.7.内核启动的C语言阶段4
    2.16.6.内核启动的C语言阶段3
    2.16.5.内核启动的C语言阶段2
    JAVA_SE基础——34.static修饰成员变量
    JAVA_SE基础——33.this关键字的练习
    JAVA_SE基础——32.this关键字调用本类的构造方法
    JAVA_SE基础——31.this关键字
    JAVA类的方法调用和变量(全套)
    JAVA_SE基础——30.构造代码块
  • 原文地址:https://www.cnblogs.com/dazuihou/p/3603043.html
Copyright © 2011-2022 走看看