android开发之使用上下文菜单

android中的上下文菜单类似于PC上的鼠标右键单击,不同的是android上没有鼠标这一概念,更谈不上右键单击,在android中,一般是长按某个View,调出上下文菜单。与OptionsMenu不同的是,ContextMenu是一个针对View的菜单,它绑定在某一个View上,而OptionsMenu是属于一个Activity的。

现在大部分浏览器都有长按复制的功能,如下图:

这种效果的实现是使用PopupWindow来实现的(关于PopupWindow的使用可以参见我的另一篇文章popupWindow使用详解
),虽然它和我们即将要说的ContextMenu很像。

好了,说了这么多,我们该说说怎么实现上下文菜单了。

实现上下文菜单一共三个步骤:

1.重写Activity或者Fragment中的onCreateContextMenu方法:

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("你想干啥?");
		menu.setHeaderIcon(R.drawable.a4c);
		menu.add(0, 0, Menu.NONE, "复制");
		menu.add(0, 1, Menu.NONE, "剪贴");
		menu.add(0, 2, Menu.NONE, "重命名");
		menu.add(1, 3, Menu.NONE, "去新的Activity");
	}

2.重写Activity或者Fragment中的onContextItemSelected方法,实现菜单事件监听

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 0:
			tv.setText(item.getTitle().toString());
			break;
		case 1:
			tv.setText(item.getTitle().toString());
			break;
		case 2:
			tv.setText(item.getTitle().toString());
			break;
		case 3:
			tv.setText(item.getTitle().toString());
			startActivity(new Intent(this, SecondActivity.class));
			break;
		default:
			return super.onContextItemSelected(item);
		}
		return true;
	}

3.给View注册上下文菜单

tv = (TextView) this.findViewById(R.id.tv);
		this.registerForContextMenu(tv);

三个步骤实现了给一个TextView注册了上下文菜单事件,有时候我们会遇到另外情况,比如说要给ListView中的每一项都添加上下文菜单,而且当我们长按ListView该项的时候,我们还希望能够知道我们点击的是哪一个item,这个该怎么实现呢?AdapterContextMenuInfo专为解决这个问题而生,看看先下面的代码:

public class SecondActivity extends Activity {

	private ListView lv;
	private String[] menuStrs;
	private ArrayAdapter<String> adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		lv = (ListView) this.findViewById(R.id.lv);
		initListView();
		this.registerForContextMenu(lv);
	}

	private void initListView() {
		menuStrs = new String[] { "庆历四年春", "滕子京谪守巴陵郡", "越明年", "政通人和" };
		adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, menuStrs);
		lv.setAdapter(adapter);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("你想干啥?");
		menu.setHeaderIcon(R.drawable.a4c);
		menu.add(0, 0, Menu.NONE, "岳");
		menu.add(0, 1, Menu.NONE, "阳");
		menu.add(0, 2, Menu.NONE, "楼");
		menu.add(1, 3, Menu.NONE, "记");
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
				.getMenuInfo();
		switch (item.getItemId()) {
		case 0:
			menuStrs[menuInfo.position] += "岳";
			break;
		case 1:
			menuStrs[menuInfo.position] += "阳";
			break;
		case 2:
			menuStrs[menuInfo.position] += "楼";
			break;
		case 3:
			menuStrs[menuInfo.position] += "记";
			break;
		default:
			return super.onContextItemSelected(item);
		}
		adapter.notifyDataSetChanged();
		return true;
	}
}

前面的东西都很简单,我就不多说了,通过AdapterContextMenuInfo的实例我们可以拿到我们所点击item的position,id等,我们这里实现的一个效果就是点击上下文菜单之后在每个item View后面添加一个字。

实现的效果如下图所示:

Demo下载https://github.com/lenve/contextMenu

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

时间: 2024-08-24 09:13:06

android开发之使用上下文菜单的相关文章

android 通过点击上下文菜单采用intent启动activity

编程小白一枚,如题,如何才能做到,我现在已经在app中添加了浮动的导航菜单,我希望在点击导航菜单的时候启动一个新的activity,但是下面的代码完成不了,请大神看一下. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 protected void onCreate(Bundle savedInstanceSta

Android开发之多级下拉列表菜单实现(仿美团,淘宝等)

我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单.具体如图所示: 上面两张图就是美团的一个二级列表菜单的一个展示.我相信很多人都想开发一个跟它一样的功能放到自己的APP中.好,接下来我们就开始动手,解决它. 1,结构分析 首先,我们给出这个下来菜单需要的组建.我们用线框图来分析. 1)如上图所示,最外围的是一个Activity,顶部包含了一个View的容器,这个容器主要是装载ToggleButton来实现诸如美团里面的"美食,全城,理我最近,刷选&

Android开发中的menu菜单

复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //getMenuInflater().inflate(R.menu.main, menu); //第一个参数是组的ID,第二个参数是添加的选项的ID,第

Android开发系列(二十九):使用ContextMenu创建上下文菜单

在上一篇我们介绍了创建选项菜单,这里我们介绍下创建上下文菜单. 上下文菜单就是通过长按某一段文字,然后出来相应的菜单.就比如贴吧,当你长安某一楼层,就会弹出来一个"复制"这一楼层文字的菜单,点一下"复制",这段文字就保存在你手机的临时存储的地方了,可以在别的地方黏贴. 开发上下文菜单的步骤: 1.重写Activity的onCreateContextMenu(ContextMenu menu,View source,ContextMenu.Context MenuIn

android 上下文菜单详解

本文使用xml来创建上下文菜单 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add" android:title="添加" android:orderInCategor

Android自定义上下文菜单

今天自定义了一个简单的Android菜单控件.实现方式是:PopupWindow和ListView. 现在来给大家分享一下源码: SHContextMenu.java 核心代码部分:主要是对PopupWindow和ListView的初始化,为ListView设置数据源,以及封装了菜单的显示和隐藏的方法.还有提供了菜单的点击回调. import android.app.Activity; import android.content.Context; import android.graphics

Android开发:仿美团下拉列表菜单,帮助类,复用简单

最近在项目中需要用到下拉菜单,公司比较推崇美团的下拉菜单,于是要实现该功能,想着,这个功能应该是一个经常会用到的,于是何不写一个帮助类,只要往这个类里面传入特定的参数,既可以实现下来菜单,而且还可以实现菜单选择的回调,既可以重复使用,有简单便捷 首先,查看界面效果图 界面倒是比较简单,主要列下功能: 这个是靠一个帮助类实现的,下次想在自己的项目中实现该功能,一句引用代码,传入特定的参数既可以实现该功能 菜单弹出的时候,背景变灰色,菜单收回,背景回复白色 自动给选定的选项添加背景色,如果下次选择的

android开发零基础入门教程

最实用.最容易上手的android课程 很多java学习者都想尽快掌握android开发的流程!为此,我们推出了12小时系列课程,学习者只需要两天时间即可掌握android开发的基本知识,跨入android开发的大门,如想深入学习,请关注课程更新:授课时,我们也注重展示android开发中的实际技巧,课上代码都由老师一行一行实际敲出,真实展现了android开发中的细节. 在学习本课程时,你应该掌握基本java开发知识.数据库知识.XML技术等.这些技术我们再12小时学android课程中不再赘

Android开发长按菜单上下文菜单

安卓开发中长按弹出菜单的创建方法: 1.首先给View注册上下文菜单registerForContextMenu(); 2.添加上下文菜单内容onCreateContextMenu(): ---可以通过代码动态添加: ---可以加载xml文件中的菜单项: 3.设置菜单点击后响应事件onContextItemSelected(); 运行效果图如下: activity_main.xml代码如下: <RelativeLayout android:layout_width="match_paren