• Android开发之Menu


    Menu : 意之菜单。

    在Android开发中,有三种菜单:

    1. OptionsMeun:  选项菜单
    2. ContextMenu: 上下文菜单
    3. SubMenu: 子菜单

    OptionsMenu: 

    按住Android手机的Menu键,就会显示OptonsMenu,它有以下要点:

    1. "By default, every Activity supports an options menu of actions or options. You can add items to this menu and handle clicks on your additions." ,详情请见:http://developer.android.com/reference/android/view/Menu.html
    2. 最多只显示6个菜单项,如果超过6个,它会以“More”形式来调出;
    3. 支持Title与Icon,可以设置快捷键。
    4. 方法:
      1. Activity: onCreateOptionsMenu(Menu menu) : 创建option menu,方法需要传入Menu 接口
      2. Activity:   onOptionsItemSelected(MenuItem item): 菜单项目被选择事件,方法需要传入MenuItem接口
      3. Activity:   onOptionsMenuClosed(Menu menu): 当菜单被关闭后,调用;
      4. Activity:   onPrepareOptionsMenu(Menu menu): 菜单显示之前调用;如果要动态显示菜单,可以写在此方法中。
    5. 代码:
     1 @Override
     2     public boolean onCreateOptionsMenu(Menu menu) {
     3         /**
     4          * 1. 如果不分组,就自定义为Menu.NONE 2. id: 这个很重要:onOptionsItemSelected(MenuItem
     5          * item) 根据id来判断那个菜单被选中 3. 定义菜单的排列 3. 设置Title
     6          */
     7         menu.add(Menu.NONE, 1, Menu.NONE, "Dialog");
     8         menu.add(Menu.NONE, 2, Menu.NONE, "Toast");
     9         menu.add(Menu.NONE, 3, Menu.NONE, "Dialog With List");
    10         menu.add(Menu.NONE, 4, Menu.NONE, "ViewGroup");
    11         menu.add(Menu.NONE, 5, Menu.NONE, "test2").setTitle("test");
    12         menu.add(Menu.NONE, 6, Menu.NONE, "test3").setIcon(
    13                 R.drawable.gallery_05);
    14 
    15         return super.onCreateOptionsMenu(menu);
    16     }
    17 
    18     @Override
    19     public boolean onOptionsItemSelected(MenuItem item) {
    20         switch (item.getItemId()) {
    21         case 1:
    22             createDialog();
    23             break;
    24 
    25         case 2:
    26             Toast.makeText(MainActivity.this, "Hello World", Toast.LENGTH_SHORT)
    27                     .show();
    28             break;
    29 
    30         case 3:
    31             createDialogWithList();
    32             break;
    33 
    34         case 4:
    35             startActivity(ViewGroupActivity.class);
    36 
    37         default:
    38             break;
    39         }
    40 
    41         return super.onOptionsItemSelected(item);
    42     }
    43 
    44     @Override
    45     public void onOptionsMenuClosed(Menu menu) {
    46         Toast.makeText(this, "OptionsMenu closed", Toast.LENGTH_SHORT).show();
    47     }
    48 
    49     @Override
    50     public boolean onPrepareOptionsMenu(Menu menu) {
    51         Toast.makeText(this, "Prepare to show menu", Toast.LENGTH_SHORT).show();
    52         return true;
    53     }
    View Code

     ContextMenu:

    1. 要绑定一个View,任何View都可以,EG:Button,ListView; 并且要执行Long Click动作.
    2. 不支持快捷键之item icon.
    3. Activity: onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo):创建ContextMenu
    4. Activity: onContextItemSelected(MenuItem item): 处理选中的菜单
    5. Activity: registerForContextMenu(View view) : 通常在onCreate中调用
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
     3     <item
     4         android:id="@+id/item1"
     5         android:checkable="true"
     6         android:checked="false"
     7         android:title="item1"/>
     8     <item
     9         android:id="@+id/item2"
    10         android:title="item2"/>
    11     <item
    12         android:id="@+id/item3"
    13         android:title="sub menu">
    14         <menu>
    15             <item
    16                 android:id="@+id/sub1"
    17                 android:title="sub1"/>
    18         </menu>
    19     </item>
    20 </menu>
    View Code
     1 @Override
     2     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
     3         super.onCreateContextMenu(menu, v, menuInfo);
     4         menu.setHeaderTitle("context menu test");
     5         menu.setHeaderIcon(android.R.drawable.ic_menu_share);
     6         getMenuInflater().inflate(R.menu.test_menu, menu);
     7     }
     8     @Override
     9     public boolean onContextItemSelected(MenuItem item){
    10         switch (item.getItemId()) {
    11         case R.id.item1:
    12             item.setChecked(true);
    13             break;
    14         case R.id.item2:
    15         default:
    16             break;
    17         }
    18         return super.onContextItemSelected(item);
    19     }
    View Code

     为方便大家自定义,这里没有提供onCreate方法,如果要实现ContextMenu效果需要在onCreate方法中调用: registerForContextMenu(View)方法;

    Sub menu

      比较简单:http://developer.android.com/reference/android/view/SubMenu.html 

      但是需要注意Sub menu不能添加子菜单,它Options menu及Context menu是可以添加之菜单的;由此可见在Android中菜单的深度只有二层。






    【Dylan童鞋】

    关注Dylan童鞋,请搜索微信号:DylanTongXue 。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Q群:315858410. 此群用于关注DylanTongXue者交流!群成员职业不限,程序员居多,讨论主题不限:技术分享,生活感悟,职场心得,时事分析...

  • 相关阅读:
    HTML常用标签及其属性
    初识Java
    JS中firstChild,lastChild,nodeValue属性
    前端网页进度Loading
    Git分支管理小结
    Vim文本编辑命令
    EF
    Linq
    委托(作用:解耦),lambda的演化
    单例模式
  • 原文地址:https://www.cnblogs.com/idayln/p/3090666.html
Copyright © 2020-2023  润新知