|
目录结构:
第一步:
/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) |
|