Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1080|回复: 0

android 选项菜单Menu,SubMenu,MenuItem的用法-  Android学习

[复制链接]

该用户从未签到

发表于 2011-10-24 15:03:21 | 显示全部楼层 |阅读模式
目录结构:

第一步:
/OptionsMenuDemo/res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="app_name">选项菜单</string>

    <string name="label">你的选择为 \n</string>

    <string name="gender">性别</string>

    <string name="male">男</string>

    <string name="female">女</string>

    <string name="hobby">体育爱好</string>

    <string name="basketball">篮球</string>

    <string name="football">足球</string>

    <string name="volleyball">排球</string>

    <string name="OK">确定</string>

</resources>
复制代码
第二步:
/OptionsMenuDemo/res/layout/options_menu_layout.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  android:id="@+id/linearLayout"

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  androidrientation="vertical">

  

  <ScrollView android:id="@+id/scrollView"

                  android:layout_width="fill_parent"

                  android:layout_height="fill_parent">

  

          <EditText android:id="@+id/editText"

                  android:layout_width="fill_parent"

                  android:layout_height="fill_parent"

                  android:editable="false"

                  android:cursorVisible="false"

                  android:text="@string/label"/>

  </ScrollView>

</LinearLayout>
复制代码
第三步:
/OptionsMenuDemo/src/com/myoptionsmenu/values/MenuFinalValues.java
package com.myoptionsmenu.values;



public interface MenuFinalValues {

        

        //总菜单项组的编号

        public static final int MAIN_GROUP = 0;

        

        //性别子菜单组的编号

        public static final int GENDER_GROUP = 1;

        

        //爱好子菜单组的编号

        public static final int HOBBY_GROUP = 2;

        

        //性别为男的选项编号

        public static final int MENU_GENDER_MALE = 3;

        

        //性别女的选项编号

        public static final int MENU_GENDER_FEMALE = 4;

        

        //爱好篮球编号

        public static final int MENU_HOBBY_BASKETBALL = 5;

        

        //足球

        public static final int MENU_HOBBY_FOOTBALL = 6;

        

        //排球

        public static final int MENU_HOBBY_VOLLEYBALL = 7;

        

        public static final int MENU_OK = 8;

        

        //性别子菜单

        public static final int MENU_GENDER = 9;  

        

        //爱好子菜单

        public static final int MENU_HOBBY = 10;

        

}
复制代码

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



import static com.myoptionsmenu.values.MenuFinalValues.*;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SubMenu;

import android.view.MenuItem.OnMenuItemClickListener;

import android.widget.EditText;



/*

* Option Menu是activity的一组基本的menu items,由机器上的menu键触发。

* Option Menu包含两种Menu item:Icon Menu item、Expended Menu item。

* Icon Menu是由用户点击触发的处于界面底端的菜单。

* 它最大可以有六个菜单,而且是唯一支持icon功能的menu item,

* 也是唯一不支持checkbox和radio按钮的menu item。expanded menu是一个竖直列表。

* 当用户点击Icon menu的"more"选项时弹出。

* 它只会在Option menu超过六个时显视,Option Menu应该显视程序的基本功能或导航。

* 当用户第一次按menu键时,系统会调用onCreateOptionsMenu()方法,

* 你可能通过编程,用 add()方法增加菜单或在xml中定义。

* 当一个item被选中时,onOptionsitemSelected()会被回调,此时可以用 getItemId()

* 区分被选中的item。

* onCreateOptionsMenu:第一次调用时触发,用于初始化相关item

*/

public class OptionsMenuActivity extends Activity {



        private MenuItem male = null;

        

        private MenuItem[] hobbies = new MenuItem[3];

        

        @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.options_menu_layout);

    }

        

        @Override

        public boolean onCreateOptionsMenu(Menu menu) {

               

               

                //建立性别菜单组

                SubMenu subMenuGender = menu.addSubMenu(MAIN_GROUP, MENU_GENDER,

                                0, R.string.gender);

                subMenuGender.setIcon(R.drawable.gender);

                //设置子菜单图标

                subMenuGender.setHeaderIcon(R.drawable.gender);

               

                //为性别子菜单项添加菜单内容

                male = subMenuGender.add(GENDER_GROUP, MENU_GENDER_MALE,

                                0, R.string.male);

                // 设置为默认值,即选中状态(此时后面的选中按钮未出现)

                male.setChecked(true);

                subMenuGender.add(GENDER_GROUP, MENU_GENDER_FEMALE, 0, R.string.female);

                //设置GENDER_GROUP组互斥,即该组是一组单选(可以为多个)

                subMenuGender.setGroupCheckable(GENDER_GROUP, true, true);



               

                //建立爱好菜单组

                SubMenu subMenuHobby = menu.addSubMenu(MAIN_GROUP, MENU_HOBBY,

                                0, R.string.hobby);

                subMenuHobby.setIcon(R.drawable.hobby);

                subMenuHobby.setHeaderIcon(R.drawable.hobby);

               

                hobbies[0] = subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY_BASKETBALL,

                                0, R.string.basketball);

                //Icons只能在图标菜单中显示;它们在扩展菜单和子菜单中不可见,也就是

                //SubMenu中的MenuItem不支持icon,所以下面 setIcon是不可见的

                //basketball.setIcon(R.drawable.basketball);

                //为此项添加复选按钮

                hobbies[0].setCheckable(true);

                hobbies[0].setChecked(true); //设置为选中状态

                hobbies[1] = subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY_FOOTBALL,

                                            0, R.string.football);

                hobbies[1].setCheckable(true);

                hobbies[2] = subMenuHobby.add(HOBBY_GROUP, MENU_HOBBY_VOLLEYBALL,

                                            0, R.string.volleyball);

                hobbies[2].setCheckable(true);

               

                MenuItem ok = menu.add(GENDER_GROUP+2, MENU_OK, 0, R.string.OK);

               

                OnMenuItemClickListener listener = new OnMenuItemClickListener() {



                        @Override

                        public boolean onMenuItemClick(MenuItem menuItem) {

                                getSubMenuStr();

                                return true;

                        }

                        

                };

               

                ok.setOnMenuItemClickListener(listener);

                //设置快捷键

                ok.setAlphabeticShortcut('o');

                return true;

        }

        

        @Override

        public boolean onOptionsItemSelected(MenuItem menuItem) {

               

                switch(menuItem.getItemId()) {

                        case MENU_GENDER_MALE:

                        case MENU_GENDER_FEMALE:

                                menuItem.setChecked(true);

                                getSubMenuStr();

                                break;

                        case MENU_HOBBY_BASKETBALL:

                        case MENU_HOBBY_FOOTBALL:

                        case MENU_HOBBY_VOLLEYBALL:

                                menuItem.setChecked(!menuItem.isChecked());

                                getSubMenuStr();

                                break;

                }

                return true;

        }

        

        private void getSubMenuStr() {

                StringBuffer result = new StringBuffer("你选择的性别为: ");

                if(male.isChecked()) {

                        result.append("男");

                } else {

                        result.append("女");

                }

               

                StringBuffer hobbyStr = new StringBuffer();

                for(MenuItem item:hobbies) {

                        if(item.isChecked()) {

                                hobbyStr.append(item.getTitle() + "、");

                        }

                }

               

                if(hobbyStr.length() > 0) {

                        result.append(",你的爱好为:")

                                  .append(hobbyStr.substring(0, hobbyStr.length()-1))

                                  .append("。\n");

                } else {

                        result.append("。\n");

                }

               

                EditText editText = (EditText) findViewById(R.id.editText);

                editText.append(result);

        }

}
复制代码
第五步:
/OptionsMenuDemo/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="com.myoptionsmenu.demo"

      android:versionCode="1"

      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".OptionsMenuActivity"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>



    </application>

    <uses-sdk android:minSdkVersion="8" />

</manifest>
复制代码

效果图:

              初始化的时候(如要出现菜单,需按下Menu键)

                         按下MENU键后,菜单弹出

               性别子菜单项

                     爱好子菜单项
下载地址:  OptionsMenuDemo.rar (90.66 KB, 下载次数: 21)
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 15:03:31 | 显示全部楼层

Re:android

又是沙发啊
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 15:03:40 | 显示全部楼层

Re:android

挺好的东东,学习之
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 15:03:44 | 显示全部楼层

Re:android

dajiahao 的帖子

顶一下!!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 15:03:52 | 显示全部楼层

Re:android

O(∩_∩)O谢谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-24 15:03:55 | 显示全部楼层

Re:android

好东西,顶起来。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 14:33 , Processed in 0.313216 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表