android 选项菜单Menu,SubMenu,MenuItem的用法

43
回复
790685
查看
  [复制链接]

140

主题

1619

帖子

3826

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2011-6-15 21:26:16 | 显示全部楼层 |阅读模式
目录结构:
第一步:
/OptionsMenuDemo/res/values/strings.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.     <string name="app_name">选项菜单</string>
  4.     <string name="label">你的选择为 \n</string>
  5.     <string name="gender">性别</string>
  6.     <string name="male">男</string>
  7.     <string name="female">女</string>
  8.     <string name="hobby">体育爱好</string>
  9.     <string name="basketball">篮球</string>
  10.     <string name="football">足球</string>
  11.     <string name="volleyball">排球</string>
  12.     <string name="OK">确定</string>
  13. </resources>
复制代码
第二步:
/OptionsMenuDemo/res/layout/options_menu_layout.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.   android:id="@+id/linearLayout"
  4.   xmlns:android="http://schemas.android.com/apk/res/android"
  5.   android:layout_width="fill_parent"
  6.   android:layout_height="fill_parent"
  7.   android:orientation="vertical">
  8.   
  9.   <ScrollView android:id="@+id/scrollView"
  10.                   android:layout_width="fill_parent"
  11.                   android:layout_height="fill_parent">
  12.   
  13.           <EditText android:id="@+id/editText"
  14.                   android:layout_width="fill_parent"
  15.                   android:layout_height="fill_parent"
  16.                   android:editable="false"
  17.                   android:cursorVisible="false"
  18.                   android:text="@string/label"/>
  19.   </ScrollView>
  20. </LinearLayout>
复制代码
第三步:
/OptionsMenuDemo/src/com/myoptionsmenu/values/MenuFinalValues.java
  1. package com.myoptionsmenu.values;

  2. public interface MenuFinalValues {
  3.        
  4.         //总菜单项组的编号
  5.         public static final int MAIN_GROUP = 0;
  6.        
  7.         //性别子菜单组的编号
  8.         public static final int GENDER_GROUP = 1;
  9.        
  10.         //爱好子菜单组的编号
  11.         public static final int HOBBY_GROUP = 2;
  12.        
  13.         //性别为男的选项编号
  14.         public static final int MENU_GENDER_MALE = 3;
  15.        
  16.         //性别女的选项编号
  17.         public static final int MENU_GENDER_FEMALE = 4;
  18.        
  19.         //爱好篮球编号
  20.         public static final int MENU_HOBBY_BASKETBALL = 5;
  21.        
  22.         //足球
  23.         public static final int MENU_HOBBY_FOOTBALL = 6;
  24.        
  25.         //排球
  26.         public static final int MENU_HOBBY_VOLLEYBALL = 7;
  27.        
  28.         public static final int MENU_OK = 8;
  29.        
  30.         //性别子菜单
  31.         public static final int MENU_GENDER = 9;  
  32.        
  33.         //爱好子菜单
  34.         public static final int MENU_HOBBY = 10;
  35.        
  36. }
复制代码

第四步:
/OptionsMenuDemo/src/com/myoptionsmenu/demo/OptionsMenuActivity.java
  1. package com.myoptionsmenu.demo;

  2. import static com.myoptionsmenu.values.MenuFinalValues.*;
  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.view.MenuItem.OnMenuItemClickListener;
  9. import android.widget.EditText;

  10. /*
  11. * Option Menu是activity的一组基本的menu items,由机器上的menu键触发。
  12. * Option Menu包含两种Menu item:Icon Menu item、Expended Menu item。
  13. * Icon Menu是由用户点击触发的处于界面底端的菜单。
  14. * 它最大可以有六个菜单,而且是唯一支持icon功能的menu item,
  15. * 也是唯一不支持checkbox和radio按钮的menu item。expanded menu是一个竖直列表。
  16. * 当用户点击Icon menu的"more"选项时弹出。
  17. * 它只会在Option menu超过六个时显视,Option Menu应该显视程序的基本功能或导航。
  18. * 当用户第一次按menu键时,系统会调用onCreateOptionsMenu()方法,
  19. * 你可能通过编程,用 add()方法增加菜单或在xml中定义。
  20. * 当一个item被选中时,onOptionsitemSelected()会被回调,此时可以用 getItemId()
  21. * 区分被选中的item。
  22. * onCreateOptionsMenu:第一次调用时触发,用于初始化相关item
  23. */
  24. public class OptionsMenuActivity extends Activity {

  25.         private MenuItem male = null;
  26.        
  27.         private MenuItem[] hobbies = new MenuItem[3];
  28.        
  29.         @Override
  30.     public void onCreate(Bundle savedInstanceState) {
  31.         super.onCreate(savedInstanceState);
  32.         setContentView(R.layout.options_menu_layout);
  33.     }
  34.        
  35.         @Override
  36.         public boolean onCreateOptionsMenu(Menu menu) {
  37.                
  38.                
  39.                 //建立性别菜单组
  40.                 SubMenu subMenuGender = menu.addSubMenu(MAIN_GROUP, MENU_GENDER,
  41.                                 0, R.string.gender);
  42.                 subMenuGender.setIcon(R.drawable.gender);
  43.                 //设置子菜单图标
  44.                 subMenuGender.setHeaderIcon(R.drawable.gender);
  45.                
  46.                 //为性别子菜单项添加菜单内容
  47.                 male = subMenuGender.add(GENDER_GROUP, MENU_GENDER_MALE,
  48.                                 0, R.string.male);
  49.                 // 设置为默认值,即选中状态(此时后面的选中按钮未出现)
  50.                 male.setChecked(true);
  51.                 subMenuGender.add(GENDER_GROUP, MENU_GENDER_FEMALE, 0, R.string.female);
  52.                 //设置GENDER_GROUP组互斥,即该组是一组单选(可以为多个)
  53.                 subMenuGender.setGroupCheckable(GENDER_GROUP, true, true);

  54.                
  55.                 //建立爱好菜单组
  56.                 SubMenu subMenuHobby = menu.addSubMenu(MAIN_GROUP, MENU_HOBBY,
  57.                                 0, R.string.hobby);
  58.                 subMenuHobby.setIcon(R.drawable.hobby);
  59.                 subMenuHobby.setHeaderIcon(R.drawable.hobby);
  60.                
  61.                 hobbies[0] = subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY_BASKETBALL,
  62.                                 0, R.string.basketball);
  63.                 //Icons只能在图标菜单中显示;它们在扩展菜单和子菜单中不可见,也就是
  64.                 //SubMenu中的MenuItem不支持icon,所以下面 setIcon是不可见的
  65.                 //basketball.setIcon(R.drawable.basketball);
  66.                 //为此项添加复选按钮
  67.                 hobbies[0].setCheckable(true);
  68.                 hobbies[0].setChecked(true); //设置为选中状态
  69.                 hobbies[1] = subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY_FOOTBALL,
  70.                                             0, R.string.football);
  71.                 hobbies[1].setCheckable(true);
  72.                 hobbies[2] = subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY_VOLLEYBALL,
  73.                                             0, R.string.volleyball);
  74.                 hobbies[2].setCheckable(true);
  75.                
  76.                 MenuItem ok = menu.add(GENDER_GROUP+2, MENU_OK, 0, R.string.OK);
  77.                
  78.                 OnMenuItemClickListener listener = new OnMenuItemClickListener() {

  79.                         @Override
  80.                         public boolean onMenuItemClick(MenuItem menuItem) {
  81.                                 getSubMenuStr();
  82.                                 return true;
  83.                         }
  84.                        
  85.                 };
  86.                
  87.                 ok.setOnMenuItemClickListener(listener);
  88.                 //设置快捷键
  89.                 ok.setAlphabeticShortcut('o');
  90.                 return true;
  91.         }
  92.        
  93.         @Override
  94.         public boolean onOptionsItemSelected(MenuItem menuItem) {
  95.                
  96.                 switch(menuItem.getItemId()) {
  97.                         case MENU_GENDER_MALE:
  98.                         case MENU_GENDER_FEMALE:
  99.                                 menuItem.setChecked(true);
  100.                                 getSubMenuStr();
  101.                                 break;
  102.                         case MENU_HOBBY_BASKETBALL:
  103.                         case MENU_HOBBY_FOOTBALL:
  104.                         case MENU_HOBBY_VOLLEYBALL:
  105.                                 menuItem.setChecked(!menuItem.isChecked());
  106.                                 getSubMenuStr();
  107.                                 break;
  108.                 }
  109.                 return true;
  110.         }
  111.        
  112.         private void getSubMenuStr() {
  113.                 StringBuffer result = new StringBuffer("你选择的性别为: ");
  114.                 if(male.isChecked()) {
  115.                         result.append("男");
  116.                 } else {
  117.                         result.append("女");
  118.                 }
  119.                
  120.                 StringBuffer hobbyStr = new StringBuffer();
  121.                 for(MenuItem item:hobbies) {
  122.                         if(item.isChecked()) {
  123.                                 hobbyStr.append(item.getTitle() + "、");
  124.                         }
  125.                 }
  126.                
  127.                 if(hobbyStr.length() > 0) {
  128.                         result.append(",你的爱好为:")
  129.                                   .append(hobbyStr.substring(0, hobbyStr.length()-1))
  130.                                   .append("。\n");
  131.                 } else {
  132.                         result.append("。\n");
  133.                 }
  134.                
  135.                 EditText editText = (EditText) findViewById(R.id.editText);
  136.                 editText.append(result);
  137.         }
  138. }
复制代码
第五步:
/OptionsMenuDemo/AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.       package="com.myoptionsmenu.demo"
  4.       android:versionCode="1"
  5.       android:versionName="1.0">
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">
  7.         <activity android:name=".OptionsMenuActivity"
  8.                   android:label="@string/app_name">
  9.             <intent-filter>
  10.                 <action android:name="android.intent.action.MAIN" />
  11.                 <category android:name="android.intent.category.LAUNCHER" />
  12.             </intent-filter>
  13.         </activity>

  14.     </application>
  15.     <uses-sdk android:minSdkVersion="8" />
  16. </manifest>
复制代码

效果图:
              初始化的时候(如要出现菜单,需按下Menu键)
                         按下MENU键后,菜单弹出
               性别子菜单项
                     爱好子菜单项
下载地址:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

114

帖子

64

安币

程序猿

Rank: 2

发表于 2011-6-15 22:04:18 | 显示全部楼层
又是沙发啊

点评

【小国】http://www.59nh.com 邪恶漫画、邪恶动态图,想要就来   发表于 2015-6-19 14:29
分享知识,热爱生活
我的回帖就是你的动力,感动有木有

0

主题

9

帖子

0

安币

初级码农

Rank: 1

发表于 2011-6-21 10:45:06 | 显示全部楼层
挺好的东东,学习之

0

主题

83

帖子

154

安币

程序猿

Rank: 2

发表于 2011-7-7 17:09:47 | 显示全部楼层
回复 dajiahao 的帖子

顶一下!!!

213

主题

127

帖子

1055

安币

禁止发言

QQ达人

发表于 2011-8-24 11:53:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

77

帖子

58

安币

程序猿

Rank: 2

QQ达人

发表于 2011-10-5 15:02:36 | 显示全部楼层
好东西,顶起来。。

0

主题

57

帖子

0

安币

程序猿

Rank: 2

发表于 2011-11-28 18:15:34 | 显示全部楼层
嗯嗯嗯嗯嗯嗯嗯

0

主题

8

帖子

40

安币

初级码农

Rank: 1

发表于 2011-12-22 17:52:21 | 显示全部楼层
绝对是个好东东
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )