/*
* 选项菜单和子菜单(SubMenu)
* 添加菜单和子菜单的步骤如下:
* 1.重写Activity哦onCreateOptionsMenu(Menu menu)的方法,
* 在该方法里调用Menu对象的方法来添加菜单或是子菜单。
* 2.如果希望应用程序能响应菜单现的单击事件,重写Activity
* 的onOptionItemSelectd(MenuItem mi)方法即可
*/
import 略
* 选项菜单和子菜单(SubMenu)
* 添加菜单和子菜单的步骤如下:
* 1.重写Activity哦onCreateOptionsMenu(Menu menu)的方法,
* 在该方法里调用Menu对象的方法来添加菜单或是子菜单。
* 2.如果希望应用程序能响应菜单现的单击事件,重写Activity
* 的onOptionItemSelectd(MenuItem mi)方法即可
*/
import 略
public class Ex002_14Activity extends Activity {
// 定义字体大小菜单项的标识
final int FONT_10 = 0X111;
final int FONT_12 = 0X112;
final int FONT_14 = 0X113;
final int FONT_16 = 0X114;
final int FONT_18 = 0X115;
// 定义普通菜单项的标识
final int PLAIN_ITEM = 0X11b;
// 定义颜色菜单项的标识
final int FONT_RED = 0X116;
final int FONT_BLUE = 0X117;
final int FONT_GREEN = 0X118;
private TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
}
// 当用户点击菜单键时触发该方法
public boolean onCreateOptionsMenu(Menu menu) {
// ---------向menu中添加字体大小的子菜单----------
SubMenu fontMenu = menu.addSubMenu("字体大小");
menu.add("111");
// 设置菜单的图标、菜单头的图标和菜单头的标题
fontMenu.setIcon(R.drawable.font);
fontMenu.setHeaderIcon(R.drawable.font);
fontMenu.setHeaderTitle("选择字体大小");
fontMenu.add(1, FONT_10, 0, "10号字体");
fontMenu.add(1, FONT_12, 0, "12号字体");
fontMenu.add(0, FONT_14, 0, "14号字体");
fontMenu.add(0, FONT_16, 0, "16号字体");
fontMenu.add(2, FONT_18, 0, "18号字体");
// ---------向menu中添加普通菜单项----------
menu.add(0, PLAIN_ITEM, 0, "普通菜单");
// ---------向menu中添加文字颜色子菜单项----------
SubMenu colorMenu = menu.addSubMenu("字体颜色");
// 设置菜单头的标题和图标
colorMenu.setHeaderTitle("选择文字颜色");
colorMenu.setHeaderIcon(R.drawable.color);
// 往colorMenu中添加菜单项
colorMenu.add(0, FONT_RED, 0, "红色");
colorMenu.add(0, FONT_GREEN, 0, "绿色");
colorMenu.add(0, FONT_BLUE, 0, "蓝色");
return super.onCreateOptionsMenu(menu);
}
// 菜单项被单击后的回调方法
public boolean onOptionsItemSelected(MenuItem mi) {
// 判断单击到了哪个菜单项
switch (mi.getItemId()) {
case FONT_10:
tv.setTextSize(10 * 2);
break;
case FONT_12:
tv.setTextSize(12 * 2);
break;
case FONT_14:
tv.setTextSize(14 * 2);
break;
case FONT_16:
tv.setTextSize(16 * 2);
break;
case FONT_18:
tv.setTextSize(18 * 2);
break;
case PLAIN_ITEM:
Toast toast = Toast.makeText(Ex002_14Activity.this, "你单击了普通按钮",
Toast.LENGTH_SHORT);
toast.show();
break;
default:
break;
}
return true;
}
}
下面我们来看下运行后的结果:
总结:上面的程序代码就是添加了四个菜单的代码,其中有两个是子菜单,两个是普通的菜单,
而且程序还为子菜单设置了图标,运行上面的程序后点击“MENU”按键就可以看到如上图的界面了。
我们可以在Menu中添加子菜单(SubMenu)和添加菜单项(MenuItem),但是我们不能在子菜单中尝试
添加子菜单,否则程序会出现如下异常:(这个就不要我来翻译了吧,我英语也不好...)
java.lang.UnsupportedOperationException: Attempt to add a sub-menu to a sub-menu.