zoukankan      html  css  js  c++  java
  • Android按键之Menu详解

    Android手机一般都有三个键,返回键、Home键、菜单键;

    Android系统的菜单支持主要通过4个接口来实现。

    从上图可以看出Menu是一个父类接口,它下面有两个子类一个是ContextMenu:它表示是一个上下文菜单,SubMenu表示一个子菜单。它们都可以包含一个或多个的MenuItem菜单项

    Menu接口定义了两个方法来添加菜单项和添加子菜单。一个通过add()方法添加菜单项,addSubMenu()方法来添加子菜单。而SubMenu与ContextMenu继承了Munu接口的方法之外,还提供了一些的方法。比如设置菜单的标题、图标等;

    开发菜单和子菜单有两种方式;一是在Activity重写的方法onCreateOptionsMenu(Menu menu)方法中调用menu对象添加,然后在重写Activity的onOptionsItemSelected来响应选择的菜单项。二是通过资源文件来定义菜单项,然后在onCreateOptionsMenu方法中加载这个xml资源。onCreateOptionsMenu方法在单击Menu键时触发。

    而开发上下文菜单与上类似:分为三个步骤:一是重写onCreateContextMenu(ContextMenu menu,View source,ContextMenu.MenuInfo info)方法,然后调用registerForContextMenu(View viwe)方法为控件注册上下文菜单,最后重写onContextItemSelected(Menuitem item)来响应选择的菜单项

    实例如下:

    1、代码中添加: 

    1. package com.android.xiong.memu;  
    2.   
    3. import android.os.Bundle;  
    4. import android.app.Activity;  
    5. import android.app.AlertDialog;  
    6. import android.app.AlertDialog.Builder;  
    7. import android.view.ContextMenu;  
    8. import android.view.ContextMenu.ContextMenuInfo;  
    9. import android.view.Menu;  
    10. import android.view.MenuItem;  
    11. import android.view.SubMenu;  
    12. import android.view.View;  
    13. import android.widget.Button;  
    14.   
    15. public class MainActivity extends Activity {  
    16.   
    17.     // 定义菜单项的ItemId  
    18.     private final int NEWS = 00;  
    19.     private final int COLOR = 01;  
    20.     private final int FONT = 02;  
    21.     private final int RED = 001;  
    22.     private final int BULE = 002;  
    23.     private final int GREED = 003;  
    24.   
    25.     private final int BIG = 004;  
    26.     private final int SMALL = 005;  
    27.   
    28.     Builder bu;  
    29.   
    30.     Button show;  
    31.   
    32.     @Override  
    33.     protected void onCreate(Bundle savedInstanceState) {  
    34.         super.onCreate(savedInstanceState);  
    35.         setContentView(R.layout.activity_main);  
    36.         bu = new AlertDialog.Builder(this);  
    37.         show = (Button) findViewById(R.id.context);  
    38.         // 为Button注册上下文菜单  
    39.         registerForContextMenu(show);  
    40.   
    41.     }  
    42.   
    43.     // 用户单击Menu键时触发  
    44.     @Override  
    45.     public boolean onCreateOptionsMenu(Menu menu) {  
    46.         // 添加新建菜单项  
    47.         menu.add(0, NEWS, 0"新建");  
    48.         // 添加颜色子菜单  
    49.         SubMenu color = menu.addSubMenu(0, COLOR, 0"颜色");  
    50.         color.setHeaderTitle("选择颜色");  
    51.         color.add(0, RED, 0"红色");  
    52.         color.add(0, BULE, 0"蓝色");  
    53.         color.add(0, GREED, 0"绿色");  
    54.         // 添加字体的菜单  
    55.         SubMenu font = menu.addSubMenu(0, FONT, 0"字体");  
    56.         font.setHeaderTitle("选择字体");  
    57.         font.add(0, BIG, 0"大字体");  
    58.         font.add(0, SMALL, 0"小字体");  
    59.         return super.onCreateOptionsMenu(menu);  
    60.     }  
    61.   
    62.     // 当用户单击菜单项触发  
    63.     @Override  
    64.     public boolean onOptionsItemSelected(MenuItem item) {  
    65.         switch (item.getItemId()) {  
    66.         case RED:  
    67.             bu.setMessage("红色").setPositiveButton("确定"null).show();  
    68.             break;  
    69.         case BULE:  
    70.             bu.setMessage("蓝色").setPositiveButton("确定"null).show();  
    71.             break;  
    72.         case GREED:  
    73.             bu.setMessage("绿色").setPositiveButton("确定"null).show();  
    74.             break;  
    75.         case BIG:  
    76.             bu.setMessage("大号").setPositiveButton("确定"null).show();  
    77.             break;  
    78.         case SMALL:  
    79.             bu.setMessage("小号").setPositiveButton("确定"null).show();  
    80.             break;  
    81.         case NEWS:  
    82.             bu.setMessage("新建").setPositiveButton("确定"null).show();  
    83.             break;  
    84.         }  
    85.         return true;  
    86.     }  
    87.   
    88.     // 长按组件响应的上下文菜单  
    89.     @Override  
    90.     public void onCreateContextMenu(ContextMenu menu, View v,  
    91.             ContextMenuInfo menuInfo) {  
    92.         menu.add(0, RED, 0"红色");  
    93.         menu.add(0, BULE, 0"蓝色");  
    94.         menu.add(0, GREED, 0"绿色");  
    95.     }  
    96.   
    97.     // 点击上下文菜单项触发  
    98.     @Override  
    99.     public boolean onContextItemSelected(MenuItem item) {  
    100.         switch (item.getItemId()) {  
    101.         case RED:  
    102.             bu.setMessage("红色").setPositiveButton("确定"null).show();  
    103.             break;  
    104.         case BULE:  
    105.             bu.setMessage("蓝色").setPositiveButton("确定"null).show();  
    106.             break;  
    107.         case GREED:  
    108.             bu.setMessage("绿色").setPositiveButton("确定"null).show();  
    109.             break;  
    110.   
    111.         }  
    112.         return true;  
    113.     }  
    114.   
    115. }  


    2、XML资源定义菜单 

    1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
    2.     <!-- 添加菜单项 -->  
    3.     <item   
    4.         android:id="@+id/menu_news"  
    5.         android:title="@string/news"/>  
    6.     <!-- 添加子菜单 -->  
    7.     <item   
    8.         android:title="@string/color" >  
    9.         <menu>  
    10.             <!-- 单项选择 -->  
    11.             <group  android:checkableBehavior="single">  
    12.                 <!-- 选中红色 -->  
    13.                 <item android:id="@+id/color_red"  
    14.                     android:checked="true"  
    15.                     android:title="@string/red"/>  
    16.                 <item android:id="@+id/color_bule"  
    17.                     android:title="@string/bule"/>  
    18.                 <item android:id="@+id/color_greed"  
    19.                     android:title="@string/greed"/>  
    20.                   
    21.             </group>  
    22.         </menu>  
    23.         </item>  
    24.     <item   
    25.         android:title="@string/font" >  
    26.         <menu>  
    27.             <!-- 多项选择 -->  
    28.             <group  android:checkableBehavior="all">  
    29.                 <item android:id="@+id/font_big"  
    30.                     android:title="@string/big"/>  
    31.                 <item android:id="@+id/font_Small"  
    32.                     android:title="@string/small"/>  
    33.                   
    34.             </group>  
    35.         </menu>  
    36.         </item>  
    37.   
    38. </menu>  

     

      1. package com.android.xiong.menu2;  
      2.   
      3. import android.os.Bundle;  
      4. import android.app.Activity;  
      5. import android.app.AlertDialog;  
      6. import android.app.AlertDialog.Builder;  
      7. import android.view.ContextMenu;  
      8. import android.view.ContextMenu.ContextMenuInfo;  
      9. import android.view.Menu;  
      10. import android.view.MenuItem;  
      11. import android.view.View;  
      12. import android.widget.Button;  
      13.   
      14. public class MainActivity extends Activity {  
      15.   
      16.     Button show;  
      17.     Builder bu;  
      18.     @Override  
      19.     protected void onCreate(Bundle savedInstanceState) {  
      20.         super.onCreate(savedInstanceState);  
      21.         setContentView(R.layout.activity_main);  
      22.         bu = new AlertDialog.Builder(this);  
      23.         show=(Button)findViewById(R.id.bt_show);  
      24.         registerForContextMenu(show);  
      25.     }  
      26.   
      27.     @Override  
      28.     public boolean onCreateOptionsMenu(Menu menu) {  
      29.         getMenuInflater().inflate(R.menu.main, menu);  
      30.         return super.onCreateOptionsMenu(menu);  
      31.     }  
      32.   
      33.     @Override  
      34.     public boolean onOptionsItemSelected(MenuItem item) {  
      35.         switch (item.getItemId()) {  
      36.         case R.id.color_red:  
      37.             bu.setMessage("红色").setPositiveButton("确定"null).show();  
      38.             break;  
      39.         case R.id.color_bule:  
      40.             bu.setMessage("蓝色").setPositiveButton("确定"null).show();  
      41.             break;  
      42.         case R.id.color_greed:  
      43.             bu.setMessage("绿色").setPositiveButton("确定"null).show();  
      44.             break;  
      45.         case R.id.font_big:  
      46.             bu.setMessage("大号").setPositiveButton("确定"null).show();  
      47.             break;  
      48.         case R.id.font_Small:  
      49.             bu.setMessage("小号").setPositiveButton("确定"null).show();  
      50.             break;  
      51.         case R.id.menu_news:  
      52.             bu.setMessage("新建").setPositiveButton("确定"null).show();  
      53.             break;  
      54.         }  
      55.         return true;  
      56.     }  
      57.   
      58.     @Override  
      59.     public void onCreateContextMenu(ContextMenu menu, View v,  
      60.             ContextMenuInfo menuInfo) {  
      61.         getMenuInflater().inflate(R.menu.main, menu);  
      62.     }  
      63.   
      64.     @Override  
      65.     public boolean onContextItemSelected(MenuItem item) {  
      66.         switch (item.getItemId()) {  
      67.         case R.id.color_red:  
      68.             bu.setMessage("红色").setPositiveButton("确定"null).show();  
      69.             break;  
      70.         case R.id.color_bule:  
      71.             bu.setMessage("蓝色").setPositiveButton("确定"null).show();  
      72.             break;  
      73.         case R.id.color_greed:  
      74.             bu.setMessage("绿色").setPositiveButton("确定"null).show();  
      75.             break;  
      76.         case R.id.font_big:  
      77.             bu.setMessage("大号").setPositiveButton("确定"null).show();  
      78.             break;  
      79.         case R.id.font_Small:  
      80.             bu.setMessage("小号").setPositiveButton("确定"null).show();  
      81.             break;  
      82.         case R.id.menu_news:  
      83.             bu.setMessage("新建").setPositiveButton("确定"null).show();  
      84.             break;  
      85.         }  
      86.         return true;  
      87.     }  
      88.       
      89.       
      90. }  
  • 相关阅读:
    关于response.getWriter()写回数据的实际发生时间点
    警惕多iframe下的同名id引起的诡异问题
    spring注入静态成员变量提示invalid setter method
    plsql+绿色版oracle连接远程数据库配置及提示缺少msvcr71.dll解决方法
    <mvc:default-servlet-handler/>导致SimpleUrlHandlerMapping失效
    maven项目下jsp文件中el表达式失效问题
    Python爬虫框架Scrapy实例(三)数据存储到MongoDB
    Python爬虫实例(五) requests+flask构建自己的电影库
    MySQL与Python交互
    Python爬虫基础(四)Requests库的使用
  • 原文地址:https://www.cnblogs.com/android100/p/android-menu.html
Copyright © 2011-2022 走看看