`
stephen830
  • 浏览: 2998120 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android 菜单(ContextMenu)

 
阅读更多

Android 菜单(ContextMenu)

 

Android 的ContextMenu,即上下文菜单。(类似电脑上的鼠标右键功能,选中某个元素,然后点右键,在弹出菜单上执行操作。)在手机上,通过长时间按住界面上的元素,就会出现事先设计好的上下文菜单。

 

主要用到的方法有:

// 创建显示上下文菜单
setOnCreateContextMenuListener

//监听长按事件
setOnItemLongClickListener

//监听普通按键事件
setOnItemClickListener

//上下文菜单的选中事件
onContextItemSelected

//监听上下文菜单关闭事件
onContextMenuClosed
 

 


示例(ListView上下文菜单)

 



 


 

效果图

 

main_list_view.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"
    >
<ListView
    android:id="@+id/main_list_view_listview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
</LinearLayout>

 

main_list_view_item.xml配置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/RelativeLayout_Item"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	android:paddingBottom="5dip"
	>
	<TextView 
		android:id="@+id/main_list_view_item_item_text"
		android:layout_centerHorizontal="true" 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:textSize="20px"
		android:layout_gravity="center"
		/>
</LinearLayout>

 

Activity代码

package com.zhouzijing.android;

import java.util.ArrayList;
import com.zhouzijing.android.util.MenuEntity;
import com.zhouzijing.android.util.SimpleAdapterUtil;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Menu2 extends Activity {
	final Context context = this;
	//定义1个ListView
	private ListView listView = null;
	//定义ListView需要显示的数据
	private ArrayList<ArrayList<Object>> viewInfos = null;
	//定义上下文菜单
	final private static int CONTEXT_MENU_EDIT = 0;//菜单[编辑]的编号 
	final private static int CONTEXT_MENU_SHARE = 1;//菜单[分享]的编号 
	final private static int CONTEXT_MENU_DELETE = 2;//菜单[删除]的编号 
	final private static int CONTEXT_MENU_CANCEL = 3;//菜单[取消]的编号 
	private int itemLongClickSelected = 0;
    private MenuEntity[] contextMenus = {
    		new MenuEntity(0, CONTEXT_MENU_EDIT, 0, "编辑"),
    		new MenuEntity(0, CONTEXT_MENU_SHARE, 1, "分享"),
    		new MenuEntity(0, CONTEXT_MENU_DELETE, 2, "删除"),
    		new MenuEntity(0, CONTEXT_MENU_CANCEL, 3, "取消"),
    		};

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_list_view);
        //初始化要显示的内容
    	initListViewInfos();
        //显示ListView
        showListView();
        //显示ListView的上下文菜单
        showListViewContextMenu();
    }
	
	/**
	 * 初始化ListView需要显示的内容.
	 */
	public void initListViewInfos(){
		viewInfos = new ArrayList<ArrayList<Object>>();
		ArrayList<Object> countrys = new ArrayList<Object>();
		countrys.add("Austria");
		countrys.add("China");
		countrys.add("Egypt");
		countrys.add("France");
		countrys.add("Ireland");
		countrys.add("Japan");
		countrys.add("Spain");
		countrys.add("United Kingdom");
		countrys.add("United States");
		viewInfos.add(countrys);
	}
	
	/**
	 * 从ListView显示内容中删除1条记录.
	 */
	public void removeItem(int index){
		viewInfos.get(0).remove(index);
	}
	/**
	 * 从ListView显示内容中读取1条记录
	 * @param index
	 * @return
	 */
	public Object readItem(int index){
		return viewInfos.get(0).get(index);
	}
	
	/**
	 * 读取当前执行的菜单
	 * @param index
	 * @return
	 */
	public CharSequence readContextMenu(int index){
		for(int i=0;i<contextMenus.length;i++){
			if(contextMenus[i].getItemId()==index) return contextMenus[i].getTitle();
		}
		return "";
	}
	/**
     * 显示ListView.
     */
    public void showListView(){
    	final Context context = this;
    	
    	//定义适配器to参数
    	int[] to = {R.id.main_list_view_item_item_text};
    	int resource = R.layout.main_list_view_item;
    	
    	//生成适配器:使用自定义工具类 SimpleAdapterUtil.java来生成适配器
    	SimpleAdapter simpleAdapter = SimpleAdapterUtil.create(context,viewInfos,resource,to); 
    	
    	listView = (ListView)findViewById(R.id.main_list_view_listview);
    	listView.setAdapter(simpleAdapter);
    }
    /**
     * 显示ListView的上下文菜单
     */
    public void showListViewContextMenu(){
    	//创建上下文菜单
    	listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){

			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,
					ContextMenuInfo menuInfo) {
				menu.setHeaderTitle(readItem(itemLongClickSelected).toString());
				MenuEntity menuEntity = null;
				for(int i=0;i<contextMenus.length;i++){
					menuEntity = contextMenus[i];
					menu.add(menuEntity.getGroupId(),menuEntity.getItemId(),menuEntity.getOrder(),menuEntity.getTitle());
				}
			}
    	});
    	
    	//监听列表项目的长按事件
    	listView.setOnItemLongClickListener(new OnItemLongClickListener(){

			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				itemLongClickSelected = position;
				Toast.makeText(context,"item["+position+":"+readItem(itemLongClickSelected).toString()+"]被长时间点击了.",Toast.LENGTH_SHORT).show();
				return false;
			}
    		
    	});
    	
    	//监听列表项目的普通点击事件
    	listView.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(context,"item["+position+":"+readItem(position).toString()+"]被点击了.",Toast.LENGTH_SHORT).show();
			}
    	});
    }

	@Override
	public boolean onContextItemSelected(MenuItem item) {//执行上下文菜单中的菜单
		int itemId = item.getItemId();
		Toast.makeText(context,"Context menu item["+itemId+":"+readContextMenu(itemId)+"] is Selected.",Toast.LENGTH_SHORT).show();
		if(CONTEXT_MENU_DELETE==itemId){//删除
			//当前选中的ListView中的item编号
			int index = itemLongClickSelected;
			//在当前ListView中删除选中的元素
			removeItem(index);
			//重新显示ListView
			showListView();
		}
		return super.onContextItemSelected(item);
	}

	@Override
	public void onContextMenuClosed(Menu menu) {//关闭上下文菜单
		Toast.makeText(context,"Context Menu is Closed.",Toast.LENGTH_SHORT).show();
		super.onContextMenuClosed(menu);
	}
    
    
}
 

 

备注:

 

private MenuEntity[] contextMenus = {
    		new MenuEntity(0, CONTEXT_MENU_EDIT, 0, "编辑"),
    		new MenuEntity(0, CONTEXT_MENU_SHARE, 1, "分享"),
    		new MenuEntity(0, CONTEXT_MENU_DELETE, 2, "删除"),
    		new MenuEntity(0, CONTEXT_MENU_CANCEL, 3, "取消"),
    		};

参考 关于菜单基础属性的实体类

 

SimpleAdapter simpleAdapter = SimpleAdapterUtil.create(context,viewInfos,resource,to); 

参考 1个简单的SimpleAdapter工具类-SimpleAdapterUtil(版本二:数据格式为ArrayList<ArrayList<Object>>)

 

 

 

关于根据上下文菜单来获取当前选中的GridView(或ListView等)的元素

 

		//OnCreateContextMenuListener
		gridPhoneBook.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,
					ContextMenuInfo menuInfo) {
				//获取上下文菜单点击的GridView中的元素
				AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
				int position = info.position;
				//设置上下文菜单的标题
				PhoneBook phoneBook = (PhoneBook)phoneBookAdapter.getItem(position);
				menu.setHeaderTitle(phoneBook.getName());
				//设置上下文菜单
				MenuEntity menuEntity;
				for(int i=0;i<CONTEXT_MENUS.length;i++){
					menuEntity = CONTEXT_MENUS[i];
					menu.add(menuEntity.getGroupId(), menuEntity.getItemId()
							,menuEntity.getOrder(),menuEntity.getTitle());
				}
			}
		}); 
	

/**
	 * 上下文菜单-具体菜单的执行操作.
	 */
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		
		//获取选中的GridView的元素
		AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
		int position = info.position;
		PhoneBook phoneBook = (PhoneBook)phoneBookAdapter.getItem(position);
		//菜单ID
		int menuId = item.getItemId();
		switch(menuId){
		case CONTEXT_MENU_PHONE_BOOK_DELETE:
			doContextMenuOfDelete(phoneBook);
			break;
		}
		return super.onContextItemSelected(item);
	}
 

 

 

 

 

 

 

  • 大小: 16.6 KB
  • 大小: 18.3 KB
分享到:
评论

相关推荐

    Android之上下文菜单ContextMenu

    在Android开发中,上下文菜单(ContextMenu)是一种常用的交互元素,它为用户提供了一种针对特定视图或数据项的操作选项。上下文菜单通常在长按某个视图后弹出,显示与该视图相关的操作。在本文中,我们将深入探讨`...

    android ContextMenu 上下文菜单

    在Android开发中,`ContextMenu`是用户交互的一种重要方式,特别是在处理列表或视图时,为用户提供更多操作选项。上下文菜单(ContextMenu)通常在长按某个项目时弹出,而不是像常规菜单那样通过菜单键或者汉堡菜单...

    安卓Android源码——ContextMenu上下文选项菜单,长按后跳出菜单.zip

    在安卓(Android)开发中,`ContextMenu`是一个重要的交互元素,它允许用户在长按某个视图或项时显示一个包含多个操作选项的菜单。这个压缩包文件"安卓Android源码——ContextMenu上下文选项菜单,长按后跳出菜单....

    Android 学习(22)ContextMenu

    总结起来,Android的ContextMenu为用户提供了方便的长按操作选项,通过创建菜单资源、注册和处理菜单项,可以轻松地在应用中实现这一功能。不过,开发者需要根据具体应用场景来决定是否使用ContextMenu,并考虑其与...

    Android ContextMenu 上下文选项菜单,长按后跳出菜单Demo.zip

    这个"Android ContextMenu 上下文选项菜单,长按后跳出菜单Demo.zip"包含了实现这一功能的示例代码。下面我们将深入探讨Android中的ContextMenu以及如何创建和使用它。 首先,理解ContextMenu的基本概念。...

    Android应用源码之ContextMenu 上下文选项菜单,长按后跳出菜单-IT计算机-毕业设计.zip

    在Android应用开发中,ContextMenu是用户界面中一个重要的交互元素,它通常在用户长按某个视图或元素时出现,提供一系列与该视图相关的操作选项。本项目以"ContextMenu"为主题,旨在帮助毕业设计的学生深入理解并...

    Android ContextMenu 上下文选项菜单,长按后跳出菜单-IT计算机-毕业设计.zip

    在“Android ContextMenu 上下文选项菜单,长按后跳出菜单”的案例中,我们可以深入学习如何在Android应用中实现这种功能。 首先,要创建ContextMenu,我们需要在AndroidManifest.xml文件中为对应的Activity添加`...

    A0246上下文菜单ContextMenu1

    【Android 上下文菜单(ContextMenu)详解】 在 Android 开发中,上下文菜单(ContextMenu)是一种常见的交互方式,它类似于PC上的鼠标右键菜单。当用户在特定的View上长按超过两秒钟时,系统会弹出一个上下文菜单,...

    Android代码-ContextMenu上下文选项菜单长按后跳出菜单.zip

    在Android开发中,ContextMenu是一个非常重要的功能,它允许用户在长时间按压某个视图或项时弹出一个上下文相关的操作菜单。这个压缩包“Android代码-ContextMenu上下文选项菜单长按后跳出菜单.zip”包含了关于如何...

    ContextMenu 上下文选项菜单,长按后跳出菜单_android源码.zip

    在Android开发中,ContextMenu是一个非常重要的交互元素,它允许用户在长按某个视图或控件后弹出一个包含多种操作选项的菜单。这个上下文菜单通常用于提供与选定项目相关的特定操作,如编辑、删除、复制等。下面将...

    Android应用源码之ContextMenu 上下文选项菜单,长按后跳出菜单_源码.zip

    在Android应用开发中,ContextMenu是用户界面中一个重要的交互元素,它允许用户在长按某个视图或项目时出现一个包含多个操作选项的菜单。这个压缩包中的源码提供了关于如何实现ContextMenu的一个实例,名为...

    Android菜单定制总结

    Android中的菜单主要分为三种类型:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和弹出式菜单(PopupMenu)。选项菜单通常在动作栏(ActionBar)上显示,上下文菜单则在长按时触发,而弹出式菜单则在需要时...

    Android之ContextMenu

    在Android开发中,`ContextMenu`是一个非常实用的功能,它为用户提供了一个上下文相关的操作菜单,通常在长按操作后出现。这个功能可以帮助用户对特定视图进行更细致的操作,而无需打开新的活动或对话框。在本文中,...

    ContextMenu

    在Android开发中,`ContextMenu`是一个非常重要的交互元素,它为用户提供了一种在长按操作后展示更多选项的界面。`ContextMenu`不同于普通的`OptionsMenu`,后者通常在屏幕顶部(如Action Bar)显示,而`ContextMenu...

    安卓Android源码——ContextMenu 上下文选项菜单,长按后跳出菜单.zip

    这个压缩包文件“安卓Android源码——ContextMenu 上下文选项菜单,长按后跳出菜单.zip”(实际文件名为“安卓Android源码——ContextMenu 上下文选项菜单,长按后跳出菜单.rar”)可能包含了展示如何在应用中实现`...

    智能家居系统 上下文菜单ContextMenu.doc

    智能家居系统中的上下文菜单(ContextMenu)是用户交互的重要组成部分,特别是在智能设备和移动应用程序中。这一概念主要在计算机科学和软件工程领域内被广泛应用,尤其是Android操作系统的设计中。本教学内容将深入...

    Android 菜单筛选器

    接下来,我们将深入探讨Android菜单筛选器的实现原理、使用方法以及相关的知识点。 首先,让我们了解一下菜单的基本概念。在Android中,菜单主要用于在非触摸界面(如物理键盘设备)上显示操作选项。它们可以在活动...

    Android 为EditText文本框添加长按显示上下文菜单.rar

    Android ContextMenu实例,为EditText文本框添加上下文菜单,菜单激活并显示的方式是,用户在EditText输入框上面长按2秒,即可弹出上下文菜单,如运行截图所示的效果,为实现此功能,创建了onCreateContextMenu ...

    android菜单的使用

    1、在android Activity中重写onCreateOptionsMenu(),onOptionsItemSeclected() 与onCreateContextMenu()与onContextItemSelected()来实现OptionsMenu 与ContextMenu菜单。 2、子菜单的使用

    ContextMenu 上下文选项菜单,长按后跳出菜单.rar

    上下文选项菜单(ContextMenu)是用户界面设计中的一个重要元素,特别是在移动设备和计算机操作系统中,它为用户提供了一种快速访问与选定内容相关的操作的方式。在Android系统中,当用户长按一个视图或项目时,通常...

Global site tag (gtag.js) - Google Analytics