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 首先放出原始图像: ...
随机推荐
- bzoj 2159 - Crash 的 文明世界
Description 给定一棵\(n\le 10^5\)的树, 和\(k\le 150\) 求每个点\(x\)的\[S(x) = \sum_{y=1}^n dis(x, y) ^ k\] Analy ...
- Java的运算符及结合性
优先级 运算符 结合性 1 ()[]. 从左向右 2 !+(正)-(负)~ ++ -- 从右向左 3 * / % 从左向右 4 +(加)-(减) 从左向右 5 << >&g ...
- [9018_1563][bzoj_2144]跳跳棋
题目描述 Hzwer的跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 某一天,黄金大神和cjy用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.他们 ...
- cocos2d-iphone心得
源码下载地址: http://code.google.com/p/cocos2d-iphone/downloads/list https://github.com/cocos2d/cocos2d-ip ...
- V++ MFC CEdit输出数组 UNICODE TO ASCII码
MFC怎么在静态编辑框中输出数组 //字符转ASCII码void CUTF8Dlg::OnBnClickedButtonCharAscii(){ // TODO: 在此添加控件通知处理程序代码 Upd ...
- centos6源码编译安装lnmp环境
操作系统 版本 64位 CentOS-6.6 10.0.0.20 安装环境所需依赖包 yum -y install gcc automake autoconf libtool make gcc- ...
- mysql故障(主从复制sql线程不运行)
故障现象: 进入slave服务器,运行: mysql> show slave status\G ....... Relay_Log_File: localhost Relay_Log_Pos: ...
- centos7刚安装需要的一些基础优化
基本操作一:更改主机名 centos7有一个新的修改主机名的命令hostnamectl # hostnamectl set-hostname --static benjamin # vim /etc/ ...
- POJ2955 Brackets(区间DP)
给一个括号序列,求有几个括号是匹配的. dp[i][j]表示序列[i,j]的匹配数 dp[i][j]=dp[i+1][j-1]+2(括号i和括号j匹配) dp[i][j]=max(dp[i][k]+d ...
- 图论常用算法之一 POJ图论题集【转载】
POJ图论分类[转] 一个很不错的图论分类,非常感谢原版的作者!!!在这里分享给大家,爱好图论的ACMer不寂寞了... (很抱歉没有找到此题集整理的原创作者,感谢知情的朋友给个原创链接) POJ:h ...