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)方法,在菜单选项被单击的时候会对其进行调用

下边是效果图:

时间: 2024-10-25 09:17:20

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

Android开发(二十九)——layout_weight的含义

首先声明只有在Linearlayout中,该属性才有效.之所以android:layout_weight会引起争议,是因为在设置该属性的同时,设置android:layout_width为wrap_content和match_parent会造成两种截然相反的效果.如下所示: <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android

Android开发系列(十九):为SimpleAdapter设置样式

Adapter的作用:数据在adapter中做了处理之后,显示在视图上 一般的对于ArrayAdapter来说,只需要把一个数组和一个样式传递给ArrayAdapter之后就可以在视图上用一个列表显示出这个字符串数组. 例如下边的代码: listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ls)); 但是,比如我们手机的联系人目录所示,不仅仅是有列表,而且有头像,可能还有手机

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

QT开发(二十九)——QT常用类(三)

QT开发(二十九)--QT常用类(三) 一.QImage 1.QImage简介 QT中提供了四个处理图像数据的类:QImage.QPixmap.QBitmap.QPicture. QImage提供了允许直接访问像素数据的硬件无关的图像显示方案,能够用作绘图设备. QImage专门为I/O.直接像素访问操作而设计,并进行了优化.访问图片的像素或是修改图片像素,则需要使用QImage,或者借助于QPainter来操作像素. 由于QImage继承自QPaintDevice,QPainter可以直接在Q

Android开发系列(十八):自定义控件样式在drawable文件夹下的XML实现

在Android开发的过程中,我们经常需要对控件的样式做一下改变,可以通过用增加背景图片的方式进行改变,但是背景图片放多了肯定会使得APK文件变的很大. 我们可以用自定义属性shape来实现. shape: gradient   -- 对应颜色渐变. startcolor.endcolor就不多说了. android:angle 是指从哪个角度开始变. solid      --  填充. stroke   --  描边. corners  --  圆角. padding   -- 定义内容离边

Android开发系列(十八):自己定义控件样式在drawable目录下的XML实现

在Android开发的过程中,我们常常须要对控件的样式做一下改变,能够通过用添加背景图片的方式进行改变,可是背景图片放多了肯定会使得APK文件变的非常大. 我们能够用自己定义属性shape来实现. shape: gradient   -- 相应颜色渐变. startcolor.endcolor就不多说了. android:angle 是指从哪个角度開始变. solid      --  填充. stroke   --  描边. corners  --  圆角. padding   -- 定义内容

Android开发(二十五)——Android上传文件至七牛

设置头像: Drawable drawable = new BitmapDrawable(dBitmap); //Drawable drawable = Drawable.createFromPath(path): avator.setBackgroundDrawable(drawable); String filepath = "/sdcard/paiyipai.jpg"; Bitmap bm = BitmapFactory.decodeFile(filepath); //Btima

Android开发系列(十二):获得网络上的图片

获得网络上图片的过程: 获得图片的Url->通过Url连接图片对象->把读到的图片的二进制数据写入内存->返回内存中的数据->显示出来 首先,我们要添加权限 因为我们要访问网络,所以我们要在AndroidManifest.xml文件总添加网络访问权限: <!-- 访问internet权限 --> <uses-permission android:name="android.permission.INTERNET"/> 然后就是设置界面:m

Android开发系列(十四):ListView用法、对ListView监听的三种方法以及ListView中Adapter的使用方法

一.ArrayAdapter的介绍以及ListView的用法: Adapter是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面.就是用来绑定数据用的. 用一个小例子来介绍一下: public class FriendActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea