android开发之使用上下文菜单
android中的上下文菜单类似于PC上的鼠标右键单击,不同的是android上没有鼠标这一概念,更谈不上右键单击,在android中,一般是长按某个View,调出上下文菜单。与OptionsMenu不同的是,ContextMenu是一个针对View的菜单,它绑定在某一个View上,而OptionsMenu是属于一个Activity的。
现在大部分浏览器都有长按复制的功能,如下图:
这种效果的实现是使用PopupWindow来实现的(关于PopupWindow的使用可以参见我的另一篇文章popupWindow使用详解
),虽然它和我们即将要说的ContextMenu很像。
好了,说了这么多,我们该说说怎么实现上下文菜单了。
实现上下文菜单一共三个步骤:
1.重写Activity或者Fragment中的onCreateContextMenu方法:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("你想干啥?");
menu.setHeaderIcon(R.drawable.a4c);
menu.add(0, 0, Menu.NONE, "复制");
menu.add(0, 1, Menu.NONE, "剪贴");
menu.add(0, 2, Menu.NONE, "重命名");
menu.add(1, 3, Menu.NONE, "去新的Activity");
}
2.重写Activity或者Fragment中的onContextItemSelected方法,实现菜单事件监听
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
tv.setText(item.getTitle().toString());
break;
case 1:
tv.setText(item.getTitle().toString());
break;
case 2:
tv.setText(item.getTitle().toString());
break;
case 3:
tv.setText(item.getTitle().toString());
startActivity(new Intent(this, SecondActivity.class));
break;
default:
return super.onContextItemSelected(item);
}
return true;
}
3.给View注册上下文菜单
tv = (TextView) this.findViewById(R.id.tv);
this.registerForContextMenu(tv);
三个步骤实现了给一个TextView注册了上下文菜单事件,有时候我们会遇到另外情况,比如说要给ListView中的每一项都添加上下文菜单,而且当我们长按ListView该项的时候,我们还希望能够知道我们点击的是哪一个item,这个该怎么实现呢?AdapterContextMenuInfo专为解决这个问题而生,看看先下面的代码:
public class SecondActivity extends Activity {
private ListView lv;
private String[] menuStrs;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
lv = (ListView) this.findViewById(R.id.lv);
initListView();
this.registerForContextMenu(lv);
}
private void initListView() {
menuStrs = new String[] { "庆历四年春", "滕子京谪守巴陵郡", "越明年", "政通人和" };
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, menuStrs);
lv.setAdapter(adapter);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("你想干啥?");
menu.setHeaderIcon(R.drawable.a4c);
menu.add(0, 0, Menu.NONE, "岳");
menu.add(0, 1, Menu.NONE, "阳");
menu.add(0, 2, Menu.NONE, "楼");
menu.add(1, 3, Menu.NONE, "记");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
case 0:
menuStrs[menuInfo.position] += "岳";
break;
case 1:
menuStrs[menuInfo.position] += "阳";
break;
case 2:
menuStrs[menuInfo.position] += "楼";
break;
case 3:
menuStrs[menuInfo.position] += "记";
break;
default:
return super.onContextItemSelected(item);
}
adapter.notifyDataSetChanged();
return true;
}
}
前面的东西都很简单,我就不多说了,通过AdapterContextMenuInfo的实例我们可以拿到我们所点击item的position,id等,我们这里实现的一个效果就是点击上下文菜单之后在每个item View后面添加一个字。
实现的效果如下图所示:
Demo下载https://github.com/lenve/contextMenu
版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。
android开发之使用上下文菜单的更多相关文章
- android 开发-(Contextual Menu)上下文菜单的实现
在android3.0以后,安卓设备不在提供物理的菜单按键,同时,android应用提供了另外的菜单实现机制,来替代之前的菜单创建方式.安卓设备中,平常可以使用长按住某个内容弹出菜单选项.这就是我们需 ...
- Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知
1.activity_main.xml 描述: 定义了一个TextView和三个按钮 <?xml version="1.0" encoding="utf-8&quo ...
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
注:本文转载于:http://blog.csdn.net/minimicall/article/details/39484493 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到 ...
- Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单
1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> < ...
- Android开发中的menu菜单
复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...
- android 上下文菜单详解
本文使用xml来创建上下文菜单 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:andr ...
- Android开发:仿美团下拉列表菜单,帮助类,复用简单
近期在项目中须要用到下拉菜单.公司比較推崇美团的下拉菜单,于是要实现该功能.想着.这个功能应该是一个常常会用到的.于是何不写一个帮助类,仅仅要往这个类里面传入特定的參数,既能够实现下来菜单,并且还能够 ...
- win7下android开发环境搭建(win7 64位)
win7下android开发环境搭建(win7 64位) 一.安装 JDK 下载JDK最新版本,下载地址如下: http://www.oracle.com/technetwork/java/jav ...
- Android开发长按菜单上下文菜单
安卓开发中长按弹出菜单的创建方法: 1.首先给View注册上下文菜单registerForContextMenu(); 2.添加上下文菜单内容onCreateContextMenu(): ---可以通 ...
随机推荐
- C语言中的宏总结
宏定义分为两种: 1.变量式宏定义,如 #define abc def #define str "string" #define num 100 2.函数式宏定义, #define ...
- [Android] 修改设备访问权限
在硬件抽象层模块中,我们是调用open函数来打开对应的设备文件的.例如,在2.3.2小节中开发的硬件抽象层模块freg中,函数freg_device_open调用open函数来打开设备文件/dev/f ...
- 利用if,else判断输入的是不是一个正整数
static void Main(string[] args) { while (true) { Console.Writ ...
- ☀【css】透明
让IE浏览器支持RGBA颜色http://www.hujuntao.com/web/css/ie-browser-support-for-rgba-color.html 透明纯色背景 backgrou ...
- 使用 EPUB 制作数字图书
基于 XML 的开放式 eBook 格式 是否需要分发文档.创建电子图书或者把喜欢的博客文章存档?EPUB 是一种开放式的数字图书规范,以常用的技术如 XML.CSS 和 XHTML 为基础,EPUB ...
- 关于ListView的 addHeaderView(...) 方法
在代码中使用 listView .addHeaderView(...) 方法可以在ListView组件上方添加上其他组件,并且连结在一起像是一个新组件.如果多次使用 .addHeaderView(.. ...
- SR4000(二)
返回相位(用于测距离,一个全相位代表5m) D=3*10^8/2f(60M)=5m full-phase(0xffff) 返回LED反射光的振幅和背景光均值 无效数据: B太大 幅度(也是16bit ...
- [MarsZ]程序猿谈大学之为什么不推荐就业时做程序猿
这篇文章适合一切有志做一个程序猿的人,而不仅仅只是即将进入就业市场的大学生. “又到了毕业找工作的时候了,好多朋友打电话向我咨询要不要让孩子做程序员.作为一个业内资深人士,我觉得这不能一概而论!要辩证 ...
- 【wuzhicms】apache 设置禁止访问某些文件或目录
[apache配置禁止访问] 1. 禁止访问某些文件/目录 增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库: <Files ~ "\.inc$&qu ...
- 应用引擎BAE3.0介绍及百度BAE3.0支持并发多少
百度云BAE3.0的特点:1.支持本地程序迁移百度云应用引擎BAE3.0做了很多的改进,其实就是一句话,百度云开发在不断的进步.为了节省开发者的学习成本,百度云BAE3.0增加了轻量级虚拟机,使开发环 ...