- public class MenuActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- setContentView(R.layout.menuview);
- super.onCreate(savedInstanceState);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, 0, Menu.NONE, "菜单1").setIcon(R.drawable.icon);
- menu.add(0, 1, Menu.NONE, "菜单2").setIcon(R.drawable.icon);
- menu.add(0, 2, Menu.NONE, "菜单3").setIcon(R.drawable.icon);
- menu.add(0, 3, Menu.NONE, "菜单4").setIcon(R.drawable.icon);
- menu.add(0, 4, Menu.NONE, "菜单5").setIcon(R.drawable.icon);
- menu.add(0, 5, Menu.NONE, "菜单6").setIcon(R.drawable.icon);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if(item.isChecked())
item.setChecked(false);
else {
item.setChecked(true);
}
- Dialog(item.getItemId());
- return super.onOptionsItemSelected(item);
- }
-
- private void Dialog(int message) {
- new AlertDialog.Builder(this).setMessage(
- "您单击第【" + message + "】项Menu菜单项.").show();
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:textColor="#000000"
- android:textSize="18dip"
- android:background="#00FF00"
- android:text="Menu菜单测试"
- android:gravity="center_vertical|center_horizontal"
- />
- </LinearLayout>
一个菜单组使用一个整数定义(在xml的一个资源id)。一个菜单项可以在它加入菜单时被加入菜单组。使用接受groupID的add()方法来完成这一点。
你可以使用setGroupVisible()来显示和隐藏整个菜单组;使用setGroupEnabled()来使菜单组可用和不可用;使用setGroupCheckable()来使菜单组可以或者不可选择。
Checkable menu items 可选取菜单
任何菜单项可以被用作选项开关。可以使用单选框和复选框来完成,如下图。
注意:图标菜单中的菜单项不能显示复选框或者单选框。如果你希望把这些图标菜单设为可选择的,你必须自己使用颜色或者图标变化等方式来保证它们在选定和不选定状态下的可区分性。
要使一个菜单项变为可选择的,使用setCheckable()方法:
menu.add(0, VIBRATE_SETTING_ID, 0, "Vibrate")
.setCheckable(true);
这将显示一个复选框。当这个菜单项被选择时,onOptionsItemSelected()被调用。你可以使用isChecked()和setChecked()来查看和设置它的选择状态。这里是onOptionsItemSelected()的内容:
switch (item.getItemId()) {
case VIBRATE_SETTING_ID:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
...
}
要创建一组单选框,将同样的组id分配给每个菜单项,并调用setGroupCheckable()。这种情况下,你不需要为每个菜单项调用setCheckable(),因为菜单组整个被设置为可选择。下面为在子菜单中设置两个互斥选项的方法:
SubMenu subMenu = menu.addSubMenu("Color");
subMenu.add(COLOR_MENU_GROUP, COLOR_RED_ID, 0, "Red");
subMenu.add(COLOR_MENU_GROUP, COLOR_BLUE_ID, 0, "Blue");
subMenu.setGroupCheckable(COLOR_MENU_GROUP, true, true);
setGroupCheckable()方法中, 第一个参数为我们需要设置的组id. 第二个参数为我们是否需要该组的菜单项为可选择. 第三个参数为各个选项之间是否互斥. 当设为互斥时, 选择一个选项将导致另外的选项被取消.