`
三月沙
  • 浏览: 619462 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 菜单小结--android menu 小结

阅读更多

android 菜单包括:

 

  • contextmenu(上下文菜单,通过长按调出)
  • optionmenu(menu菜单)
  • submenu(子菜单)
  • 带按钮的单选菜单
  • 带按钮的多选菜单
此程序演示了android的上下文菜单,menu按钮菜单,子菜单(包括在xml文件中添加,和在程序中动态添加单选,多选子菜单)以及带按钮单选和多选的菜单
package org.ynu.android;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MenuActivity extends Activity {

	private int groupId1 = 19880716;
	private int groupId2 = 19880717;
	private ListView lv;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		lv = (ListView) findViewById(R.id.lv);

		ArrayList data = new ArrayList();

		HashMap map1 = new HashMap();
		map1.put("item", "第一个选项");
		HashMap map2 = new HashMap();
		map2.put("item", "第二个选项");
		HashMap map3 = new HashMap();
		map3.put("item", "第三个选项");
		HashMap map4 = new HashMap();
		map4.put("item", "第四个选项");
		HashMap map5 = new HashMap();
		map5.put("item", "第五个选项");

		data.add(map1);
		data.add(map2);
		data.add(map3);
		data.add(map4);
		data.add(map5);

		SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
				new String[] { "item" }, new int[] { R.id.tv });
		lv.setAdapter(adapter);

		//listview每个项长按时的响应上下文菜单
		lv.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO Auto-generated method stub

				Toast.makeText(MenuActivity.this, "弹出上下文菜单", Toast.LENGTH_SHORT);
				return false;
			}
		});
		
		//注册上下文菜单
		registerForContextMenu(lv);
	}

	//创建菜单按钮的菜单
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub

		MenuInflater inflater = new MenuInflater(this);

		inflater.inflate(R.menu.menu, menu);
		menu.getItem(0).setIcon(R.drawable.ic_menu_delete);
		menu.getItem(1).setIcon(R.drawable.ic_menu_home);
		menu.getItem(2).setIcon(R.drawable.ic_menu_zoom);
		return super.onCreateOptionsMenu(menu);
	}

	//当按钮菜单被点击时响应
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub

		switch (item.getItemId()) {
		case R.id.delete:
			Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.main:
			Toast.makeText(this, "主页", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.zoom:
			Toast.makeText(this, "放大", Toast.LENGTH_SHORT).show();
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}

	}

	//创建上下文菜单
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		MenuInflater inflater = new MenuInflater(this);
		inflater.inflate(R.menu.context_menu, menu);
		menu.setHeaderIcon(R.drawable.icon);
		SubMenu submenu1 = menu.addSubMenu("动态添加的菜单1");
		submenu1.add(this.groupId1, 0, 0, "动态添加子菜单1");
		submenu1.add(this.groupId1, 0, 0, "动态添加子菜单2");
		submenu1.add(this.groupId1, 0, 0, "动态添加子菜单3");
		submenu1.add(this.groupId1, 0, 0, "动态添加子菜单4");

		// 设置改组子菜单为单选,第三个参数为true时,子菜单单选
		submenu1.setGroupCheckable(this.groupId1, true, true);

		SubMenu submenu2 = menu.addSubMenu("动态添加的菜单2");
		submenu2.add(this.groupId2, 0, 0, "动态添加子菜单1");
		submenu2.add(this.groupId2, 0, 0, "动态添加子菜单2");
		submenu2.add(this.groupId2, 0, 0, "动态添加子菜单3");
		submenu2.add(this.groupId2, 0, 0, "动态添加子菜单4");

		// 设置改组子菜单为多选第三个参数为false时,子菜单多选
		submenu2.setGroupCheckable(this.groupId2, true, false);
		super.onCreateContextMenu(menu, v, menuInfo);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		// TODO Auto-generated method stub

		switch (item.getItemId()) {
		case R.id.cmenu1:
			Toast.makeText(this, "上下文菜单1", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.cmenu2:
			Toast.makeText(this, "上下文菜单2", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.csubmenu1:
			Toast.makeText(this, "来自xml,我还有子菜单", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.csubmenu2:
			Toast.makeText(this, "来自xml,我还有单选子菜单", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.csubmenu3:
			Toast.makeText(this, "来自xml,我还有多选子菜单", Toast.LENGTH_SHORT).show();
			return true;
		case R.id.buttonmenu1:
			buildRadioDialog();
			return true;
		case R.id.buttonmenu2:
			builderCheckBoxDialog();
			return true;
		default:
			//当按钮被选中时,设置其选中状态为true,这样才能看到在页面上有选中的radio
			if (item.getGroupId() == this.groupId1) {
				Toast.makeText(this, "动态添加的菜单1的子菜单", Toast.LENGTH_SHORT).show();
				if (!item.isChecked()) {
					item.setChecked(true);
					Toast.makeText(this, "您选的是" + item.getTitle(),
							Toast.LENGTH_SHORT).show();
				}
			}

			if (item.getGroupId() == this.groupId2) {
				Toast.makeText(this, "动态添加的菜单2的子菜单", Toast.LENGTH_SHORT).show();
				if (!item.isChecked()) {
					item.setChecked(true);
					Toast.makeText(this, "您选的是" + item.getTitle(),
							Toast.LENGTH_SHORT).show();
				}
			}
			
			
			if (!item.isChecked()) {
				item.setChecked(true);
				Toast.makeText(this, "您选的是" + item.getTitle(),
						Toast.LENGTH_SHORT).show();
			}
			return super.onContextItemSelected(item);

		}

	}

	//上下文菜单关闭时
	@Override
	public void onContextMenuClosed(Menu menu) {
		// TODO Auto-generated method stub
		Toast.makeText(this, "上下文菜单被关", Toast.LENGTH_SHORT).show();
		super.onContextMenuClosed(menu);
	}

	private void buildRadioDialog() {
		Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("单选按钮菜单");
		final String[] titles = new String[] { "白色", "橙色", "蓝色" };

		//-1表示默认没有按钮被选中
		builder.setSingleChoiceItems(titles, -1,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MenuActivity.this, titles[which],
								Toast.LENGTH_SHORT).show();
					}
				});

		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MenuActivity.this, "确定", Toast.LENGTH_SHORT)
						.show();
			}
		});

		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MenuActivity.this, "取消", Toast.LENGTH_SHORT)
						.show();
			}
		});

		builder.create().show();
	}

	private void builderCheckBoxDialog() {
		Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("多选按钮");
		final String[] titles = new String[] { "白色", "橙色", "蓝色" };
		builder.setMultiChoiceItems(titles,
				new boolean[] { false, false, false },
				new DialogInterface.OnMultiChoiceClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which,
							boolean isChecked) {
						// TODO Auto-generated method stub

						//当checkbox选中时响应
						if (isChecked) {
							Toast.makeText(MenuActivity.this,
									titles[which] + "被选中", Toast.LENGTH_SHORT)
									.show();
						}

						//当checkbox未选中时响应
						if (!isChecked) {
							Toast.makeText(MenuActivity.this,
									titles[which] + "被取消", Toast.LENGTH_SHORT)
									.show();
						}
					}
				});

		//确定按钮事件响应
		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MenuActivity.this, "确定", Toast.LENGTH_SHORT)
						.show();
			}
		});

		//取消按钮 事件响应
		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MenuActivity.this, "取消", Toast.LENGTH_SHORT)
						.show();
			}
		});

		builder.create().show();
	}
}
 
contex_menu.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/cmenu1" android:title="上下文菜单1" />
	<item android:id="@+id/cmenu2" android:title="上下文菜单2" />
	<item android:id="@+id/csubmenu1" android:title="来自xml,我还有子菜单">
		<menu>
			<item android:title="子菜单1"></item>
			<item android:title="子菜单2"></item>
			<item android:title="子菜单3"></item>
		</menu>
	</item>
	<item android:id="@+id/csubmenu2" android:title="来自xml,我还有单选子菜单">
		<menu>
			<group android:checkableBehavior="single">
				<item android:title="子菜单1"></item>
				<item android:title="子菜单2"></item>
				<item android:title="子菜单3"></item>
			</group>
		</menu>
	</item>
	<item android:id="@+id/csubmenu3" android:title="来自xml,我还有多选子菜单">
		<menu>
			<group android:checkableBehavior="all">
				<item android:title="子菜单1"></item>
				<item android:title="子菜单2"></item>
				<item android:title="子菜单3"></item>
			</group>
		</menu>
	</item>
	
	<item android:id="@+id/buttonmenu1" android:title="带按钮的单选子菜单">
	</item>
	
	<item android:id="@+id/buttonmenu2" android:title="带按钮的多选子菜单">
	</item>
</menu>
 
menu.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
	<item android:id="@+id/delete" android:title="删除" />
	<item android:id="@+id/main" android:title="主页">
		<menu>
			<item android:id="@+id/create_new" android:title="子菜单1" />
			<item android:id="@+id/open" android:title="子菜单2" />
		</menu>
	</item>
	<item android:id="@+id/zoom" android:title="放大" />
</menu>
 
布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ListView
android:id="@+id/lv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</ListView>
</RelativeLayout>
 
item.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <TextView
  android:id="@+id/tv"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:textSize="20dip"
  android:textColor="#065fb9"
  >
  </TextView>
</RelativeLayout>
  效果图
分享到:
评论

相关推荐

    Android菜单(Menu)小结

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu).参考博客:...

    Android menu单选菜单.zip

    六、小结 Android的单选菜单为用户提供了一种优雅的方式来限制用户在一个预设的选项集中进行选择。通过定义XML资源,解析并显示菜单,以及监听菜单项的点击事件,开发者可以轻松地将单选菜单集成到自己的应用中。在...

    Android应用开发揭秘pdf高清版

    4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图...

    android开发揭秘PDF

    4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图...

    《Android应用开发揭秘》附带光盘代码.

     4.2.1l 菜单(Menu)  4.2.12 对话框(Dialog)  4.2.13 图片视图(ImageView)  4.2.14 带图标的按钮(ImageButton)  4.2.15 拖动效果(Gallery)  4.2.16 切换图片(hmgeSwilcher)  4.2.17 网格视图(GridView)  ...

    《Android应用开发揭秘》源码

     4.2.1l 菜单(Menu)  4.2.12 对话框(Dialog)  4.2.13 图片视图(ImageView)  4.2.14 带图标的按钮(ImageButton)  4.2.15 拖动效果(Gallery)  4.2.16 切换图片(hmgeSwilcher)  4.2.17 网格视图(GridView)  ...

    让AndroidX86竖屏显示

    #### 小结 通过上述步骤,我们成功地将AndroidX86从默认的横屏显示模式改为竖屏显示模式。这一改变对于开发者来说尤为有用,因为它可以帮助他们在进行应用程序测试和调试时获得更佳的视觉体验。此外,对于那些想要在...

    疯狂Android讲义源码

     1.7 本章小结 33  第2章 Android应用的界面编程 35  2.1 界面编程与视图(View)组件 36  2.1.1 视图组件与容器组件 36  2.1.2 使用XML布局文件控制UI  界面 40  2.1.3 在代码中控制UI界面 41  2.1.4 使用...

    智能家居系统 菜单Menu.doc

    课堂小结时,可以回顾菜单的种类和显示形式,强调菜单在智能家居系统中的关键作用,以及理解和掌握菜单设计原则对于提升用户体验的重要性。同时,也可以引导学生思考未来智能家居系统可能的发展趋势,如语音菜单、...

    Android编程入门很简单.(清华出版.王勇).part1

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    Android应用开发揭秘

    4.2.1l 菜单(Menu) 4.2.12 对话框(Dialog) 4.2.13 图片视图(ImageView) 4.2.14 带图标的按钮(ImageButton) 4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图...

    Android编程入门很简单.(清华出版.王勇).part2

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    Google.Android开发入门与实战

    7.4 友好的菜单——menu介绍与实例 7.4.1 实例操作演示 7.4.2 实例编程实现 7.5 Android应用的灵魂——Intent和Activity介绍与实例 7.5.1 实例操作演示 7.5.2 实例编程实现 7.6 用好列表,做好程序——列表(ListView...

    Android典型技术模块开发详解

    目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK ...16.7 本章小结

    智能家居系统 选项菜单OptionMenu.doc

    #### 四、选项菜单的实现步骤小结 1. **定义菜单文件**:在`res/menu/`目录下创建XML文件。 2. **加载菜单文件**:在MainActivity中重写`onCreateOptionsMenu`方法加载菜单文件。 3. **处理选择事件**:通过重写`...

    Google Android开发入门与实战的代码

    7.4 友好的菜单——menu介绍与实例 102 7.4.1 实例操作演示.. 103 7.4.2 实例编程实现 103 7.5 Android应用的灵魂——Intent和Activity介绍与实例 106 7.5.1 实例操作演示 106 7.5.2 实例编程实现 ...

Global site tag (gtag.js) - Google Analytics