anroid下menu的两种创建方法

        应用程序菜单是应用程序用户界面中另外一个重要的组成部分。菜单为展现应用程序功能和设置提供了一个可靠的界面。按下设备上的 MENU 键会调出最普通的应用程序菜单。然而,你也可以加入当用户长按一个项目时调出的上下文菜单。

       菜单也是用视图层次进行构架的,但你不必自己定义这个架构。你只要为你的 Activity定义 onCreateOptionsMenu() 和onCreateContextMenu() 回调方法,并声明你想要包含在菜单中处理的事务或者动作的代码即可。Android 将为你的菜单自动创建视图层次,并在其中绘入你的菜单项。
        菜单会自行处理它们的事件,所以你不必为你菜单中的项目注册事件侦听器。当你菜单中 的 某 一 项 被 选 定 时 , 框 架 将 自 动 调 用 onOptionsItemSelected() 或onContextItemSelected()方法。如同应用程序布局一样。你也可以在一个 XML 文件中定义你菜单中的项目。

 

第一种利用MenuInflater

MenuInflater 是用来解析定义在menu 目录下的菜单布局文件的,使用MenuInflater 来生成菜单,你会发现是多么的爽朗,呵呵,我今天的小Demo,是定义四个菜单,并且实现了一个菜单事件。就是我们点击设置 (Setting )菜单,进入手机设置状态!下面看一下效果图(其实质还是用xml文件来生成menu):

下面是实现Demo 的详细步骤:
一、建立一个Android 工程我们命名为MenuInflaterDemo .
二、在res 目录下创建menu 目录,并且创建options_menu.xml (我们定义的菜单)文件,代码如下:
 
 
  1. view plaincopy to clipboardprint?  
  2. <? xml   version = "1.0"   encoding = "utf-8" ?>      
  3. < menu      
  4.    xmlns:android = "http://schemas.android.com/apk/res/android" >      
  5.      < item   android:id = "@+id/menu_add"     
  6.            android:title = "Add"     
  7.            android:icon = "@android:drawable/ic_menu_add"     
  8.             />      
  9.      < item   android:id = "@+id/menu_wallaper"     
  10.            android:title = "Wallpaper"     
  11.            android:icon = "@android:drawable/ic_menu_gallery"     
  12.             />      
  13.     < item   android:id = "@+id/menu_search"     
  14.            android:title = "Search"     
  15.            android:icon = "@android:drawable/ic_search_category_default"     
  16.             />      
  17.     < item   android:id = "@+id/menu_setting"     
  18.            android:title = "Settings"     
  19.            android:icon = "@android:drawable/ic_menu_preferences"     
  20.             />      
  21. </ menu >     
  22. <? xml   version = "1.0"   encoding = "utf-8" ?>  
  23. < menu  
  24.    xmlns:android = "http://schemas.android.com/apk/res/android" >  
  25.      < item   android:id = "@+id/menu_add"  
  26.            android:title = "Add"  
  27.            android:icon = "@android:drawable/ic_menu_add"  
  28.             />  
  29.      < item   android:id = "@+id/menu_wallaper"  
  30.            android:title = "Wallpaper"  
  31.            android:icon = "@android:drawable/ic_menu_gallery"  
  32.             />  
  33.     < item   android:id = "@+id/menu_search"  
  34.            android:title = "Search"  
  35.            android:icon = "@android:drawable/ic_search_category_default"  
  36.             />  
  37.     < item   android:id = "@+id/menu_setting"  
  38.            android:title = "Settings"  
  39.            android:icon = "@android:drawable/ic_menu_preferences"  
  40.             />  
  41. </ menu >  
 
三、主类MenuInflaterDemo.java 的编码,这里写的代码很少哦,我这里只写了第四个菜单(Settings )的响应事件.全部代码如下:
 
 
  1. view plaincopy to clipboardprint?  
  2. package  com.android.tutor;     
  3. import  android.app.Activity;     
  4. import  android.content.Intent;     
  5. import  android.os.Bundle;     
  6. import  android.view.Menu;     
  7. import  android.view.MenuInflater;     
  8. import  android.view.MenuItem;     
  9. public   class  MenuInflaterDemo  extends  Activity {     
  10.      @Override     
  11.      public   void  onCreate(Bundle savedInstanceState) {     
  12.          super .onCreate(savedInstanceState);     
  13.         setContentView(R.layout.main);     
  14.     }     
  15.          
  16.      @Override     
  17.      public   boolean  onCreateOptionsMenu(Menu menu) {     
  18.         MenuInflater inflater = getMenuInflater();     
  19.         inflater.inflate(R.menu.options_menu, menu);         
  20.          return   true ;     
  21.     }     
  22.          
  23.      @Override     
  24.      public   boolean  onOptionsItemSelected(MenuItem item) {     
  25.          switch  (item.getItemId()) {     
  26.          case  R.id.menu_add:     
  27.                  
  28.              break ;     
  29.          case  R.id.menu_wallaper:     
  30.              break ;     
  31.          case  R.id.menu_search:     
  32.              break ;     
  33.          case  R.id.menu_setting:     
  34.             showSettings();     
  35.              break ;     
  36.         }     
  37.          return   super .onOptionsItemSelected(item);     
  38.     }     
  39.          
  40.          
  41.      private   void  showSettings(){     
  42.              
  43.       final  Intent settings =  new  Intent(android.provider.Settings.ACTION_SETTINGS);     
  44.             settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |     
  45.                     Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);     
  46.                  
  47.         startActivity(settings);     
  48.    }     
  49. }    
第二种方法:利用代码动态实现menu,主要是menu.add方法
1. 此程式開始執行後,按下menu就出現图示1的選單:
2.如果選取add item选项,画面标题title区显示出字串insert
3.再按下menu显示出选单,如果选取del item选项,标题title区显示出delete
4.再按下menu显示出选单,如果选取exit选项,程式就结束了
// ---- ex01.java 程式碼 ----
package com.misoo.ex01;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class ex01 extends Activity {
public static final int ADD_ID = Menu.FIRST;
public static final int DELETE_ID = Menu.FIRST + 1;
public static final int EXIT_ID = Menu.FIRST + 2;

@Override public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
}
@Override public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, ADD_ID, 0, R.string.menu_add);
    menu.add(0, DELETE_ID, 1, R.string.menu_delete);
    menu.add(0, EXIT_ID, 2, R.string.menu_exit);
    return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
        case ADD_ID: setTitle("Insert...");
                  break;
        case DELETE_ID: setTitle("Delete...");
                  break;
        case EXIT_ID:
                  finish();
                  break;
       }
       return super.onOptionsItemSelected(item);
}}
Step-3: 修改/res/values/strings.xml 的內容,更改為:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ex01</string>
<string name="menu_add">Add Item</string>
<string name="menu_delete">Del Item</string>
<string name="menu_exit">Exit</string>
</resources>
並儲存之。
Step-4: 執行之。

综合两种建立menu的方法来建立一个两级菜单:
演示如何通过 Java 代码以及使用 XML 两种方式为应用程序添加菜单,菜单分为两级,一级菜单项目有“开始”“取消”、“关于......”“关于......”菜单下又有两个子菜单“帮助......”“联系我们......”
,、。其中一级菜单为 Java 代码生成,子菜单为通过 XML 定义。通过 XML 定义,需要在 res/menu 目录下创建一个名为 menu.xml 的文件,定义菜单项。具体过程如下:

创建工程。工程名为“MenuDemo”,Application name 为“菜单示例”
在 res/menu/目录下创建一个名为 menu.xml 的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/help"
android:title="帮助" />
<item
android:id="@+id/our"
android:title="联系我们" />
</menu>
说明:
该文件定义了一组共两个菜单项。
编写MenuActivity.java
package com.sharpandroid.menu;
import
import
import
import
import
android.app.Activity;
android.os.Bundle;
android.view.Menu;
android.view.MenuInflater;
android.view.MenuItem;
public class MenuActivity extends Activity {
private static final int OK = 1;
private static final int CANCLE = 2;
private static final int ABOUT = 3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
//当点击Menu键时会打开菜单,当菜单第一次被打开始,框架回调该方法
public boolean onCreateOptionsMenu(Menu menu) {
//为菜单添加一个id为1,标题为”开始“的元素
menu.add(0, OK, 0, "开始");
menu.add(0, CANCLE, 0, "取消");
//为菜单添加一个子菜单,id为3,标题为”关于“,并返回该子菜单对象为file
Menu file = menu.addSubMenu(0, ABOUT, 0, " 关于");
//得到一个MenuInflater对象
MenuInflater inflater = getMenuInflater();
//调用inflater的inflate方法,获取资源文件中定义的元素,
//并将这些元素添加进指定的Menu——file
inflater.inflate(R.menu.submenubyxml, file);
return true;
}
@Override
//当一个菜单项被选中时,框架回调该方法,并将被点击的Item传入。
public boolean onOptionsItemSelected(MenuItem item) {
//根据被选中的Item进行不同的处理
switch (item.getItemId()) {
case OK:
this.setTitle("开始");
return true;
case CANCLE:
this.setTitle("取消");
return true;
case ABOUT:
this.setTitle("关于");
return true;
case R.id.help:
this.setTitle("帮助信息");
return true;
case R.id.our:
this.setTitle("联系我们");
return true;
}
return false;
}
}
说明:
本例中演示了如何通过 Java 代码创建菜单,并为其添加子菜单,以及如何通过 XML
文件定义菜单项,并在 Java 代码中获得信息之后添加到指定的菜单中。
综合了http://weizhulin.blog.51cto.com/1556324/311446以及大话企业级android开发以及36技
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值