安卓开发_浅谈ContextMenu(上下文菜单)
长下文菜单,即长按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(上下文菜单)的更多相关文章
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...
- 安卓开发_浅谈SubMenu(子菜单)
子菜单,即点击菜单后出现一个菜单栏供选择 创建子菜单的步骤: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 (2 ...
- 安卓开发_浅谈ListView(ArrayAdapter数组适配器)
列表视图(ListView)以垂直的形式列出需要显示的列表项. 实现过程:新建适配器->添加数据源到适配器->视图加载适配器 在安卓中,有两种方法可以在屏幕中添加列表视图 1.直接用Lis ...
- 安卓开发_浅谈Action Bar
一.Action Bar 导航栏.是3.0之后出现的. 所以注意使用的时候清单文件要设置下 android:minSdkVersion="11"(至少11) 但如果使用v4包,则不 ...
- 安卓开发_浅谈Notification(通知栏)
Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...
随机推荐
- MDX 占比同比环比
http://blog.csdn.net/hero_hegang/article/details/9072889
- MyBatis知多少(6)表现层与业务逻辑层
表现层 表现层负责向最终用户展示应用程序的控制方式以及数据.它还要负责所有信息的布局和格式.今天,商业应用程序最流行的表现方式应该算是Web前端了,它使用HTML和JavaScript并通 过Web浏 ...
- 封装系统自带的Debug
Unity3d的Debug.Log函数用于打印日志,一般项目中都会对其作如下两件事情: (1)希望有一个总的开关来控制整个游戏中日志的打印与否: (2)有的系统会将Log封一层并添加统一的标记,比如S ...
- ubuntu14.04 编译安装gcc-5.3.0
最近编译个源码,要求对C++14的支持了,就GCC的编译安装最新的5.3.0,整个过程以root用户进行. 1.下载GCC源码,属于事后文档整理,已经不知道从哪下载了. 2.解压:tar -zxvf ...
- sprint个人总结+读书博客
读书感想: 第8章讲了需求分析,在我的日常软件编写中,肯定需要需求分析的,一个没有需求的软件,编写出来也没有什么意义,只能是丢在一个角落里发霉.需求有各种各样,要怎样才能满足客户的需求呢,那就要 ...
- java和javascript双引号嵌套的问题
双引号不能嵌套双引号,否则一对双引号就结束了. java中双引号中嵌套双引号需要转义: /** * java双引号转义符测试 * @author asus * */ public static voi ...
- 【Win10】让 TextBlock 按字符换行
要想将 TextBlock 里的文本自动换行的话,只需要设置 TextWrapping 属性为 Wrap 即可. 但是 TextWrapping 是尽可能根据空白字符来换行的,因此,就有可能出现下面这 ...
- .Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点
除了使用继承IConfigurationSectionHandler的方法定义处理自定义节点的类,还可以通过继承ConfigurationSection类实现同样效果. 首先说下.Net配置文件中一个 ...
- Js中各类型数据到bool的转换
在返回Json字符串给前台时遇到的问题,返回的bool数据总是为TRUE 特意查了一下,发现了Js中各类数据转换到bool型是的结果. 希望能给遇到同样问题的人一点帮助. 数据类型 转换为bool ...
- treap树---营业额统计
台州学院 2924 描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况.Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...