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

在上一篇我们介绍了创建选项菜单,这里我们介绍下创建上下文菜单。

上下文菜单就是通过长按某一段文字,然后出来相应的菜单。就比如贴吧,当你长安某一楼层,就会弹出来一个“复制”这一楼层文字的菜单,点一下“复制”,这段文字就保存在你手机的临时存储的地方了,可以在别的地方黏贴。


开发上下文菜单的步骤:

1、重写Activity的onCreateContextMenu(ContextMenu menu,View source,ContextMenu.Context MenuInfo menuInfo)方法

2、调用Activity的registerForContextMenu(View view)方法为view组件注册上下文菜单


接下来,我们通过一个具体的应用来做下说明

首先,我们创建一个Android项目,然后我们编辑main.xml文件:

<?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:id="@+id/txt"
	android:layout_width="fill_parent" 
	android:layout_height="wrap_content" 
	android:textSize="15pt"
	android:text="可通过上下文菜单修改背景色"
	/>
</LinearLayout>
通过这个XML文件,我们定义了一行文本,可以通过长按这段文本来弹出上下文菜单,单击相应选项修改背景色


然后,我们看下ContextMenuTest.java:

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class ContextMenuTest extends Activity
{
	// 为每个菜单定义一个标识
	final int MENU1 = 0x111;
	final int MENU2 = 0x112;
	final int MENU3 = 0x113;
	private TextView txt;
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		txt = (TextView) findViewById(R.id.txt);
		// 为文本框注册上下文菜单
		registerForContextMenu(txt); 
	}

	// 创建上下文菜单时触发该方法
	@Override
	public void onCreateContextMenu(ContextMenu menu, View source,
		ContextMenu.ContextMenuInfo menuInfo)
	{
		menu.add(0, MENU1, 0, "红色");
		menu.add(0, MENU2, 0, "绿色");
		menu.add(0, MENU3, 0, "蓝色");
		// 将三个菜单项设为单选菜单项
		menu.setGroupCheckable(0, true, true);
		//设置上下文菜单的标题、图标
		menu.setHeaderIcon(R.drawable.tools);
		menu.setHeaderTitle("选择背景色");
	}

	// 上下菜单的菜单项被单击时触发该方法。
	@Override
	public boolean onContextItemSelected(MenuItem mi)
	{
		switch (mi.getItemId())
		{
			case MENU1:
				mi.setChecked(true);
				txt.setBackgroundColor(Color.RED);
				break;
			case MENU2:
				mi.setChecked(true);
				txt.setBackgroundColor(Color.GREEN);
				break;
			case MENU3:
				mi.setChecked(true);
				txt.setBackgroundColor(Color.BLUE);
				break;
		}
		return true;
	}
}
首先是重写onCreateContextMenu(ContextMenu menu, View source,ContextMenu.ContextMenuInfo menuInfo) 方法,然后通过menu.add()方法添加对应的菜单选项,

并且重写了onContextItemSelected(MenuItem mi)方法,在菜单选项被单击的时候会对其进行调用


下边是效果图:




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。