zoukankan      html  css  js  c++  java
  • Android开发之Menu组件

    菜单Menu大致分为三种类型:选项菜单(OptionsMenu),上下文菜单(ContextMenu),子菜单(SubMenu)。

    1、选项菜单

    在一个Activity界面中点击手机Menu键,在屏幕下方弹出的菜单就叫选项菜单(OptionsMenu)。

    创建一个选项菜单的步骤:
    (1)、覆写Activity的onCreateOptionsMenu(Menu menu)函数。
    (2)、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标。
    a、add()方法参数的介绍
    看一看menu.add方法的参数:
           第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
           第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
           第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
           第四个String类型的title参数,表示选项中显示的文字。
    (3)、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件。
    案例代码:
     1 package com.example.menu;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.Menu;
     6 import android.view.MenuItem;
     7 import android.widget.Toast;
     8 import android.app.AlertDialog;
     9 import android.content.DialogInterface;
    10 
    11 public class MainActivity extends Activity {
    12 
    13     @Override
    14     protected void onCreate(Bundle savedInstanceState) {
    15         super.onCreate(savedInstanceState);
    16         setContentView(R.layout.activity_main);
    17     }
    18 
    19     /*
    20      * (non-Javadoc)
    21      * 
    22      * @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
    23      * 创建一个选项菜单的步骤: 1、覆写Activity的onCreateOptionsMenu(Menu menu)函数
    24      * 2、调用menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单设置图标
    25      * 3、当菜单项()被选择时,我们可以通过覆盖Activity的onOptionsItemSeleted()方法来响应事件
    26      */
    27      //onCreateOptionsMenu()此方法只会调用一次,即第一次显示的时候会调用.
    28     public boolean onCreateOptionsMenu(Menu menu)// 需要重写的函数
    29     {
    30         menu.add(0, 0, 0, "关于");
    31         menu.add(0, 1, 0, "离开");
    32         
    33         return super.onCreateOptionsMenu(menu);
    34     }
    35      //如果需要更新菜单项.可以在onPrepareOptionsMenu()方法中操作.
    36     public boolean onPrepareOptionMenu(Menu menu)
    37     {
    38         Toast.makeText(this, "菜单显示器前执行的方法", Toast.LENGTH_SHORT).show();
    39         return super.onPrepareOptionsMenu(menu);
    40         
    41     }
    42     public boolean onOptionsItemSelected(MenuItem item)// 点击后响应的事件
    43     {
    44         super.onOptionsItemSelected(item);
    45         switch (item.getItemId()) {
    46         case 0:
    47             openOptionsDialog();
    48             break;
    49         case 1:
    50             exitopenOptionsDialog();
    51             break;
    52         }
    53          return super.onOptionsItemSelected(item);
    54 
    55     }
    56 
    57     private void openOptionsDialog() {
    58         new AlertDialog.Builder(this).setTitle("关于").setMessage("手机的配置信息")
    59                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    60 
    61                     @Override
    62                     public void onClick(DialogInterface arg0, int arg1) {
    63                         // TODO Auto-generated method stub
    64 
    65                     }
    66                 }).show();
    67     }
    68 
    69     private void exitopenOptionsDialog() {
    70         new AlertDialog.Builder(this).setTitle("离开").setMessage("是否离开?")
    71                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
    72 
    73                     @Override
    74                     public void onClick(DialogInterface arg0, int arg1) {
    75                         // TODO Auto-generated method stub
    76                         finish();
    77                     }
    78                 })
    79                 .setNegativeButton("取消", new DialogInterface.OnClickListener() {
    80 
    81                     @Override
    82                     public void onClick(DialogInterface arg0, int arg1) {
    83                         // TODO Auto-generated method stub
    84                         arg0.dismiss();
    85                     }
    86                 }).show();
    87     }
    88 }

    2、上下文菜单

    Android 的上下文菜单类似于Windows上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。

    创建上下文菜单步骤:

    1、 覆写 Activity 的 onCreateContextMenu() 方法,调用 Menu 的 add 方法添加菜单项(MenuItem)。

    2、覆盖 Activity 的 onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。

    3、调用 registerForContextMenu() 方法,为视图注册上下文菜单。

    代码:

     1 package com.example.menu;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.ContextMenu;
     6 import android.view.ContextMenu.ContextMenuInfo;
     7 import android.view.Menu;
     8 import android.view.MenuItem;
     9 import android.view.View;
    10 import android.widget.ArrayAdapter;
    11 import android.widget.ListView;
    12 import android.widget.Toast;
    13 
    14 public class MainActivity extends Activity {
    15 
    16     private ListView listview = null;
    17     private ArrayAdapter<String> adapter;
    18     private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"};
    19 
    20     @Override
    21     protected void onCreate(Bundle savedInstanceState) {
    22         super.onCreate(savedInstanceState);
    23         setContentView(R.layout.activity_main);
    24         listview=(ListView)findViewById(R.id.listview);
    25         adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
    26         listview.setAdapter(adapter);
    27         this.registerForContextMenu(listview);
    28     }
    29     public void onCreateContextMenu(ContextMenu menu, View view,
    30             ContextMenuInfo info) {
    31         menu.setHeaderTitle("我是上下文菜单");
    32         menu.setHeaderIcon(R.drawable.ic_launcher);
    33         menu.add(1, 1, 1, "我是上下文菜单选项1");
    34         menu.add(1, 2, 1, "我是上下文菜单选项2");
    35         menu.add(1, 3, 1, "我是上下文菜单选项3");
    36         menu.add(1, 4, 1, "我是上下文菜单选项4");
    37 
    38     }
    39     public boolean onContextItemSelected(MenuItem item)
    40     {
    41         switch (item.getItemId()) {
    42         case 1:
    43             Toast.makeText(this, "点击上下文菜单选项1", Toast.LENGTH_SHORT).show();
    44             break;
    45         case 2:
    46             Toast.makeText(this, "点击上下文菜单选项2", Toast.LENGTH_SHORT).show();
    47             break;
    48         case 3:
    49             Toast.makeText(this, "点击上下文菜单选项3", Toast.LENGTH_SHORT).show();
    50             break;
    51         case 4:
    52             Toast.makeText(this, "点击上下文菜单选项4", Toast.LENGTH_SHORT).show();
    53             break;
    54         }
    55         return super.onContextItemSelected(item);
    56         
    57     }
    58     public void onContextMenuClosed(Menu menu)
    59     {
    60         menu.close();
    61     }
    62 
    63 }

    注意的问题:

    android.R.layout.simple_list_item_1为系统是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。凡是以android.R...都为系统定义好的。


    3、子菜单
    创建子菜单的步骤:
    1、 覆写Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
    2、 调用SubMenu的add()方法,添加子菜单项(addSubMenu)
    3、 覆写onOptionsItemSelected()方法,响应子菜单的单击事件
    代码:
     1 package com.example.menu;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.Menu;
     6 import android.view.MenuItem;
     7 import android.view.SubMenu;
     8 import android.widget.ArrayAdapter;
     9 import android.widget.ListView;
    10 import android.widget.Toast;
    11 
    12 public class MainActivity extends Activity {
    13 
    14     private ListView listview = null;
    15     private ArrayAdapter<String> adapter;
    16     private String info[] = { "选项1", "选项2", "选项3", "选项4","选项5","选项6"};
    17 
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_main);
    22     
    23     }
    24 public boolean onCreateOptionsMenu(Menu menu)
    25     {
    26         SubMenu s1=menu.addSubMenu(1,0,1,"我是菜单1");
    27         s1.setIcon(R.drawable.ic_launcher);
    28         s1.setHeaderTitle("子菜单");//设置子菜单标题
    29         s1.add(1,1,0,"我是子菜单(1)");
    30         s1.add(1, 2, 0, "我是子菜单(2)");
    31         s1.add(1, 3, 0, "我是子菜单(3)");
    32         s1.add(1, 4, 0, "我是菜子单(4)");
    33         SubMenu s2 = menu.addSubMenu(2, 0, 1, "我是菜单2");
    34         s2.setIcon(R.drawable.ic_launcher);
    35         s2.setHeaderTitle("子菜单");
    36         s2.add(2, 1, 1, "我是子菜单(1)");
    37         s2.add(2, 2, 1, "我是子菜单(2)");
    38         s2.add(2, 3, 1, "我是子菜单(3)");
    39         s2.add(2, 4, 1, "我是子菜单(4)");
    40         return super.onCreateOptionsMenu(menu);
    41     }
    42 
    43     @Override
    44     public boolean onOptionsItemSelected(MenuItem item) {
    45         if (item.getGroupId() == 1) {// 判断分组
    46             switch (item.getItemId()) {
    47             case 1:
    48                 Toast.makeText(MainActivity.this, "菜单1的子菜单1被点击",
    49                         Toast.LENGTH_SHORT).show();
    50                 break;
    51             case 2:
    52                 Toast.makeText(MainActivity.this, "菜单1的子菜单2被点击",
    53                         Toast.LENGTH_SHORT).show();
    54                 break;
    55             case 3:
    56                 Toast.makeText(MainActivity.this, "菜单1的子菜单3被点击",
    57                         Toast.LENGTH_SHORT).show();
    58                 break;
    59             case 4:
    60                 Toast.makeText(MainActivity.this, "菜单1的子菜单4被点击",
    61                         Toast.LENGTH_SHORT).show();
    62                 break;
    63 
    64             }
    65         } else if (item.getGroupId() == 2) {
    66             switch (item.getItemId()) {
    67             case 1:
    68                 Toast.makeText(MainActivity.this, "菜单2的子菜单1被点击",
    69                         Toast.LENGTH_SHORT).show();
    70                 break;
    71             case 2:
    72                 Toast.makeText(MainActivity.this, "菜单2的子菜单2被点击",
    73                         Toast.LENGTH_SHORT).show();
    74                 break;
    75             case 3:
    76                 Toast.makeText(MainActivity.this, "菜单2的子菜单3被点击",
    77                         Toast.LENGTH_SHORT).show();
    78                 break;
    79             case 4:
    80                 Toast.makeText(MainActivity.this, "菜单2的子菜单4被点击",
    81                         Toast.LENGTH_SHORT).show();
    82                 break;
    83             }
    84         }
    85 
    86         return super.onOptionsItemSelected(item);
    87     }
    88 }





  • 相关阅读:
    MySQL-索引
    MySQL-存储引擎
    MySQL-基本概念
    Elasticsearch-分片原理2
    Elasticsearch-分片原理1
    [NOIP模拟33]反思+题解
    [NOIP模拟测试32]反思+题解
    [NOIP模拟测试31]题解
    [jzoj5840]Miner 题解(欧拉路)
    [NOIP模拟测试30]题解
  • 原文地址:https://www.cnblogs.com/hsshy/p/4783997.html
Copyright © 2011-2022 走看看