androoid framework学习之 - ContextMenu上下文菜单
来源:互联网 发布:包头稀土高新区大数据 编辑:程序博客网 时间:2024/05/16 09:11
转载自http://stephen830.iteye.com/blog/1130637
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);
- }
0 0
- androoid framework学习之 - ContextMenu上下文菜单
- androoid framework学习之 - 选项菜单OptionsMenu
- androoid framework学习之 - SubMenu创建选项菜单
- Android 之ContextMenu上下文菜单
- androoid framework学习之Service组件
- androoid framework学习之BroadCast组件
- androoid framework学习之activity组件
- androoid framework学习之 - Telephony 流程
- androoid framework学习之 - 开启数据开关
- androoid framework学习之 - RILd相关介绍
- androoid framework学习之 - Telephony 来电流程
- Android学习——上下文菜单ContextMenu
- Android开发之创建ContextMenu上下文菜单
- 上下文菜单(ContextMenu)
- ContextMenu上下文菜单
- 使用上下文菜单ContextMenu
- 上下文菜单ContextMenu
- Android--ContextMenu上下文菜单
- linux驱动开发 主设备号与次设备号
- 消息队列
- idea --maven project 工具条不见了 ------转载的
- awk经典
- 正则表达式匹配使用
- androoid framework学习之 - ContextMenu上下文菜单
- 字符常识总结
- Codejock Xtreme ToolkitPro MFC 使用
- Android WebView的简单使用,实现标题、加载进度提示
- Robot FrameWork 循环
- 到底怎么分专题,心好累…… 匈牙利算法
- mac 底下,配置 React-Native 遇到的一些问题
- eclipse中Web Project和Java Project区别
- 联想Y510p笔记本台达电版电源型号和参数