长下文菜单,即长按view显示一个菜单栏

与OptionMenu的区别
OptionMenu对应的是activity,一个activity只能拥有一个选项菜单
ContextMenu对应的是View,每个View都可以设置上下文菜单
一般情况下ContextMenu常用语ListView或者GridView;

创建和响应上下文菜单过程:

1.在activity的onCreate(...)方法中为一个view注册上下文菜单

2.在onCreateContextMenuInfo(...)中生成上下文菜单。

3.在onContextItemSelected(...)中响应上下文菜单项。

有两种方式实现:

一、java代码动态实现

 menu.setHeaderTitle("操作");
menu.setHeaderIcon(R.drawable.icon_72); //动态添加上下文菜单
menu.add(, , , "复制");
menu.add(, , , "粘贴");
menu.add(, , , "剪切");

二、xml文件静态实现

 MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);//第一个参数是xml文件 第二个参数是menu菜单
inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
看这一行代码,
我们找到其对应的文件

main.xml文件代码如下:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >

     <item
android:id="@+id/action_menu_1"
android:orderInCategory=""
android:showAsAction="never"
android:title="复制"/>
<item
android:id="@+id/action_menu_2"
android:orderInCategory=""
android:showAsAction="never"
android:title="粘贴"/>
<item
android:id="@+id/action_menu_3"
android:orderInCategory=""
android:showAsAction="never"
android:title="剪切"/> </menu>

可以看到两个菜单项,看下菜单项的各个属性:

1、 android:id=   
是菜单项id
2、android:orderInCategory=
是菜单项优先级,值越大,优先级越多,当菜单项过多时,可隐藏在折叠菜单中
3、android:showAsAction=

  原来是特定版本用到的,当你的应用程序目标设为蜂巢平台(即 Android 3.0)时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,  对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。 这个属性可接受的值有:

    1.alaways:这个值会使菜单项一直显示在ActionBar上。

    2.ifRoom:如果有足够的空间,这个值会使菜单显示在ActionBar上。

    3.never:这个值菜单永远不会出现在ActionBar是。

    4.withText:这个值使菜单和它的图标,菜单文本一起显示。

4、android:title=
是菜单项名字

1)注册上下文菜单

 this.registerForContextMenu(list);

2)生成上下文菜单

 //创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
//设置menu显示的内容 menu.setHeaderTitle("操作"); //菜单栏标题
menu.setHeaderIcon(R.drawable.icon_72); //菜单栏图标 //动态添加上下文菜单
// menu.add(1, 100, 1, "复制");
// menu.add(1, 101, 1, "粘贴");
// menu.add(1, 102, 1, "剪切");
//xml文件静态创建
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);//第一个参数是xml文件 第二个参数是menu菜单
}

在onCreateContextMenu()方法中获得点击的列表项

 AdapterContextMenuInfo menuInfos = (AdapterContextMenuInfo) menuInfo;
curItemPosition = menuInfos.position;(curItemPosition 代表点击列表中第几项出现的上下文菜单)

3)响应上下文菜单项

 @Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case :
Toast.makeText(ContextMenu_List.this, "选择的复制操作", ).show();
break;
case :
Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", ).show();
break;
case :
Toast.makeText(ContextMenu_List.this, "选择的剪切操作", ).show();
break; default:
break;
}
return super.onContextItemSelected(item); }

完整代码:

 package information;

 import com.example.allcode.R;

 import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast; public class ContextMenu_List extends Activity{
private ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.donghua_layout); list = (ListView) findViewById(R.id.listView1);
this.registerForContextMenu(list);
//为列表视图中选中的项添加响应事件
list.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View arg1, int pos,
long id) {
// TODO Auto-generated method stub
String result = parent.getItemAtPosition(pos).toString(); //获取选择项的值
Toast.makeText(ContextMenu_List.this, "点击了 "+result, Toast.LENGTH_SHORT).show();//输出选中项消息
}
}); }
//创建上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
//设置menu显示的内容 menu.setHeaderTitle("操作");
menu.setHeaderIcon(R.drawable.icon_72); //动态添加上下文菜单
// menu.add(1, 100, 1, "复制");
// menu.add(1, 101, 1, "粘贴");
// menu.add(1, 102, 1, "剪切");
//xml文件静态创建
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);//第一个参数是xml文件 第二个参数是menu菜单
} @Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case :
Toast.makeText(ContextMenu_List.this, "选择的复制操作", ).show();
break;
case :
Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", ).show();
break;
case :
Toast.makeText(ContextMenu_List.this, "选择的剪切操作", ).show();
break; default:
break;
}
return super.onContextItemSelected(item); } }

ContextMenu_List.java

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ListView
android:id="@+id/listView1"
android:entries="@array/list" android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView> </LinearLayout>

donghua_layout.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources> <string-array name = "list">
<item>山东大学</item>
<item>山东科技大学</item>
<item>山东理工大学</item>
<item>山东建筑大学</item>
<item>山东农业大学</item>
<item>济南大学</item>
<item>烟台大学</item>
<item>鲁东大学</item>
<item>临沂大学</item>
<item>聊城大学</item>
</string-array>
</resources>

arrays.xml

效果图:

安卓开发_浅谈ContextMenu(上下文菜单)的更多相关文章

  1. 安卓开发_浅谈ListView(SimpleAdapter数组适配器)

    安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...

  2. 安卓开发_浅谈ListView(自定义适配器)

    ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...

  3. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  4. 安卓开发_浅谈Fragment之ListFragment

    ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...

  5. 安卓开发_浅谈OptionsMenus(选项菜单)

    Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...

  6. 安卓开发_浅谈SubMenu(子菜单)

    子菜单,即点击菜单后出现一个菜单栏供选择 创建子菜单的步骤: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 (2 ...

  7. 安卓开发_浅谈ListView(ArrayAdapter数组适配器)

    列表视图(ListView)以垂直的形式列出需要显示的列表项. 实现过程:新建适配器->添加数据源到适配器->视图加载适配器 在安卓中,有两种方法可以在屏幕中添加列表视图 1.直接用Lis ...

  8. 安卓开发_浅谈Action Bar

    一.Action Bar 导航栏.是3.0之后出现的. 所以注意使用的时候清单文件要设置下 android:minSdkVersion="11"(至少11) 但如果使用v4包,则不 ...

  9. 安卓开发_浅谈Notification(通知栏)

    Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...

随机推荐

  1. VMware下OS X Yosemite安装VMsvga2桌面黑屏解决方法

    VMsvga2目前并不支持Yosemite,如果安装的话进入桌面除了顶部菜单,全部黑屏.通过顶部菜单打开的大部分应用都会立刻奔溃关闭.参考以下步骤可以解决问题: 1.下载VMsvga2的uninsta ...

  2. WCF 遇到的问题

    1.只有项目的net版本2.0以上的才可以引用到wcf的类库 2.HTTP 错误 404.17 - Not Found  映射问题   WCF服务建立好,提示这个错误,缺少映射问题,要将应用程序池和项 ...

  3. 游戏开发工具之纹理打包器-3.使用GDI+绘图

    上一次我们实现了把我们要的图片添加到CTreeCtrl控件里去,并显示图片的缩略图,现在开始我们要讲比较重要的部分--绘图区.为了实现能编辑图片的功能,绘图区应该具有如下功能. 1.  添加删除图片. ...

  4. LoRaWAN协议(一)--架构解析

    LoRaWAN 分层 总体架构一共分为4部分: LoRaWAN从底层到最后用户拿到数据的通讯过程通讯大致可分为三段: MOTE <---> GW (MAC层) GW <---> ...

  5. 使用stdarg.h实现可变长度参数

    现在先用一个使用过程讲解一下: ◎用法: func( Type para1, Type para2, Type para3, … ) { /****** Step 1 ******/ va_list ...

  6. JS魔法堂:那些困扰你的DOM集合类型

    一.前言 大家先看看下面的js,猜猜结果会怎样吧! 可选答案: ①. 获取id属性值为id的节点元素 ②. 抛namedItem is undefined的异常 var nodes = documen ...

  7. [Solution] 简单数字识别之Tesseract

    图像识别涉及的理论:傅里叶变换,图形形态学,滤波,矩阵变换等等. Tesseract的出现为了解决在没有这些复杂的理论基础,快速识别图像的框架. 准备: 1.样本图像学习,预处理 (平均每1个元素出现 ...

  8. 字符串hash - POJ 3461 Oulipo

    Oulipo Problem's Link ---------------------------------------------------------------------------- M ...

  9. 利用mciSendString播放音频

    最近在写音频播放器,不过有点懒散,开发进度很慢,一天只做了一点点东西.其实就是让程序能播放音频.这个在我大二学winform程序开发时书上有说,那是书上教的是用media player的COM组件,而 ...

  10. WdatePicker.js的使用方法

    WdatePicker.js的使用方法 摘自:http://www.cnblogs.com/wuchao/archive/2012/07/19/2599209.html 4. 日期范围限制 静态限制  ...