长下文菜单,即长按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. java模仿qq好友面板的布局(BoxLayout问题)

    .............. JLabel ll = new JLabel(dlg.getNameText() + ":" + dlg.getIPText(), ii[index] ...

  2. Office Online简介

    一.什么是Office Online Office Online 将 Microsoft Office 体验扩展到了 Web 浏览器,这使您可以直接在存储文档的 SharePoint 网站上处理文档, ...

  3. Java序列化中的serialVersionUID有什么用?

    如果一个实现了Serializable的类没有serialVersionUID属性,IDE(比如Eclipse)通常会报这样一个warning: The serializable class Foo ...

  4. 【Beta阶段】团队源代码管理

    0. 快速上手与理解 如果你的团队来了一个新队员,有一台全新的机器,你们是否有一个文档,只要设置了相应的权限,她就可以根据文档,从头开始搭建环境,并成功地把最新.最稳定版本的软件编译出来,并运行必要的 ...

  5. mysql修改definer方法

    -- 函数.存储过程 select definer from mysql.proc; update mysql.proc set definer='billing@%';   -- 定时事件 sele ...

  6. svn状态图标大全

     黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别 ...

  7. P6 EPPM 安装与配置指南 16 R1 2016.4

       关于安装和 配置P6 EPPM 本指南告诉你如何自动 安装和配置您的应用程序. 在您开始之前,阅读 先决条件 P6 EPPM配置 (7页). 安装P6 EPPM 您将使用 安装程序 (窗口) . ...

  8. 【C#】线程协作式取消

    Microsoft .Net Framework 提供了一个标准的取消操作的模式.这个模式是协作式的,意味着你想取消的操作必须显示地支持取消. CLR为我们提供了两个类: System.Threadi ...

  9. JAVA的网络编程基础概念

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协 ...

  10. 【Unity】12.5 Navmesh Obstacle组件

    开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 在大多数游戏情景中,可行进的区域往往不是完全不变的.比如被破坏的路.桥等将不再允许通过.那么, ...