Android学习(二十二)ContentMenu上下文菜单
一、上下问菜单
在某个菜单项上长按,会弹出一个菜单,这个就是上下文菜单。有点类似与Windows系统中的右键菜单。
二、上下文菜单的内容
1、标题
2、图标
3、菜单项
4、对应的菜单事件
三、OptionsMenu和ContentMenu的区别:
1、OptionMenu对应的Activity,一个Activity只能拥有一个选项菜单。
2、 ContentMenu对应的View,每个View都可以设置上下文菜单。
3、一般情况下,上下文菜单常用于ListView或者GirdView。
四、如何实现ContentMenu:
1、首先给View注册上下文菜单,registerForContextMenu();
2、通过xml布局的方式添加菜单项,也可以通过代码的方式动态添加菜单项。
3、设置菜单点击后的相应事件,onContextItemSelected();
五、代码实现
main.xml:放置一个ListView用来显示列表信息
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"> <ListView
android:id="@+id/lv_files"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView> </LinearLayout>
menu_layout.xml,自定义的菜单项内容,可以通过菜单中getMenuInflater方法获取定义好的xml菜单。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item
android:id="@+id/menu_copy"
android:orderInCategory="100"
android:title="复制"
app:showAsAction="never" />
<item
android:id="@+id/menu_paste"
android:orderInCategory="100"
android:title="粘贴"
app:showAsAction="never" />
<item
android:id="@+id/menu_cut"
android:orderInCategory="100"
android:title="剪切"
app:showAsAction="never" />
<item
android:id="@+id/menu_rename"
android:orderInCategory="100"
android:title="重命名"
app:showAsAction="never" />
</menu>
main.java
package com.example.zhengcheng.contextmenudemo; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast; import java.util.ArrayList;
import java.util.zip.Inflater; public class MainActivity extends ActionBarActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LoadListView();
} ListView lv_files; private void LoadListView() { lv_files = (ListView) findViewById(R.id.lv_files);
//创建一个适配器,用来填充到ListView中。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, getArrayList());
//设置listView的适配器
lv_files.setAdapter(adapter);
//为listview注册上下文菜单
this.registerForContextMenu(lv_files);
} /**
* 创建上下文菜单,重写onCreateContextMenu方法
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("文件操作"); //设置上下问菜单的标题
menu.setHeaderIcon(R.mipmap.ic_launcher); //设置上下问菜单的图标 //动态添加菜单项
// menu.add(1,101,1,"复制");
// menu.add(1,102,1,"粘贴");
// menu.add(1,103,1,"剪切");
// menu.add(1,104,1,"删除");
// menu.add(1,105,1,"重命名"); //导入xml菜单内容
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_layout, menu);
} /**
* 设置上下问菜单内容的点击事件,重写onContextItemSelected方法
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
//获取选中的ListView中的Item项
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); //给动态生成的菜单项添加事件
// switch (item.getItemId()) {
// case 101:
// Toast.makeText(this, "复制", Toast.LENGTH_SHORT).show();
// break;
// case 102:
// Toast.makeText(this, "粘贴", Toast.LENGTH_SHORT).show();
// break;
// case 103:
// Toast.makeText(this, "剪切", Toast.LENGTH_SHORT).show();
// break;
// case 104:
// Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
// break;
// case 105:
// Toast.makeText(this, "重命名", Toast.LENGTH_SHORT).show();
// break;
// } //给xml菜单项生成事件
switch (item.getItemId()){
case R.id.menu_copy:
//Toast.makeText(this, "xml_复制", Toast.LENGTH_SHORT).show();
Toast.makeText(this, info.toString() + "复制", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_cut:
Toast.makeText(this, "xml_剪切", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_paste:
Toast.makeText(this, "xml_粘贴", Toast.LENGTH_SHORT).show();
break;
case R.id.menu_rename:
Toast.makeText(this, "xml_重命名", Toast.LENGTH_SHORT).show();
break;
} return super.onContextItemSelected(item);
} /**
* 获取数据,填充到ArrayAdapter的数据
*
* @return
*/
private ArrayList<String> getArrayList() {
ArrayList<String> list = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
list.add("文件" + i);
}
return list;
}
}
Android学习(二十二)ContentMenu上下文菜单的更多相关文章
- Android学习(十二) ContentProvider
一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据, ...
- android 学习随笔十二(网络:使用异步HttpClient框架)
使用异步HttpClient框架发送get.post请求 在https://github.com/ 搜索 asyn-http https://github.com/search?utf8=✓& ...
- Android学习路线(二十四)ActionBar Fragment运用最佳实践
转载请注明出处:http://blog.csdn.net/sweetvvck/article/details/38645297 通过前面的几篇博客.大家看到了Google是怎样解释action bar ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十):使用菜单消息功能
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>教程中,我们介绍了如何使用“客服接口”,即在服务器后台,在任意时间向微信发送文本.图文.图片等不 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
随机推荐
- Inline Hook
@author: dlive IAT Hook时如果要钩取的API不在IAT中(LoadLibrary后调用),则无法使用该技术.而Inline Hook不存在这个限制. 0x01 Inline Ho ...
- v4l2驱动文档之——streaming IO【转】
转自:http://blog.csdn.net/zoe6553/article/details/17715441 v4l2驱动编写篇第六B--流输入输出 在本系列文章的上一期中,我们讨论了如何通过re ...
- VS MFC 按键导入BMP图片
1. 图片导入资源: 2.实现代码: 直接给CButton加图片的方法: 1.在资源编辑器中添加一个按钮.把它的Bitmap属性设为true 2.在按钮上点右键,添加一个变量m_Btn(CButton ...
- 基于UDP高性能传输协议UDT doc翻译(一)
原文转自:http://hi.baidu.com/doodlezone/item/74a203155efe26dbbf9042dd UDT文档阅读理解 一. 概述 ...
- Selenium2+python自动化3-解决pip使用异常【转载】
一.pip出现异常 有一小部分童鞋在打开cmd输入pip后出现下面情况:Did not provide a commandDid not provide a command?这是什么鬼?正常情况应该是 ...
- nginx安全日志分析脚本的编写
https://blog.csdn.net/nextdoor6/article/details/51914966
- [BZOJ1054][HAOI2008]移动玩具 bfs+hash
1054: [HAOI2008]移动玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2432 Solved: 1355[Submit][Stat ...
- AC日记——魔法少女LJJ bzoj 4399
魔法少女LJJ 思路: 动态开点权值线段树+启发式合并: 来,上代码: #include <cmath> #include <cstdio> #include <cstr ...
- POJ1273 Drainage Ditches (网络流)
Drainage Ditches Time Limit: 1000MS Memor ...
- luogu P3818 小A和uim之大逃离 II
题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...