您的位置:首页 > 产品设计 > UI/UE

11. android 选项菜单(此处为icon menu)--Menu,SubMenu,MenuItem的用法

2011-04-19 22:50 766 查看
目录结构:



第一步:

/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"
android:orientation="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键后,菜单弹出



性别子菜单项



爱好子菜单项

下载地址:

http://download.csdn.net/source/3207129
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: