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

  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/dazuihou/p/3603043.html
Copyright © 2011-2022 走看看