安卓开发_浅谈ContextMenu(上下文菜单)

长下文菜单,即长按view显示一个菜单栏

与OptionMenu的区别
OptionMenu对应的是activity,一个activity只能拥有一个选项菜单
ContextMenu对应的是View,每个View都可以设置上下文菜单
一般情况下ContextMenu常用语ListView或者GridView;

创建和响应上下文菜单过程:

1.在activity的onCreate(...)方法中为一个view注册上下文菜单

2.在onCreateContextMenuInfo(...)中生成上下文菜单。

3.在onContextItemSelected(...)中响应上下文菜单项。

有两种方式实现:

一、java代码动态实现

1 menu.setHeaderTitle("操作");
2         menu.setHeaderIcon(R.drawable.icon_72);
3
4         //动态添加上下文菜单
5          menu.add(1, 100, 1, "复制");
6          menu.add(1, 101, 1, "粘贴");
7          menu.add(1, 102, 1, "剪切");

二、xml文件静态实现

1 MenuInflater inflater = getMenuInflater();
2         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
看这一行代码,我们找到其对应的文件

main.xml文件代码如下:

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 2
 3     <item
 4         android:id="@+id/action_menu_1"
 5         android:orderInCategory="100"
 6         android:showAsAction="never"
 7         android:title="复制"/>
 8     <item
 9         android:id="@+id/action_menu_2"
10         android:orderInCategory="100"
11         android:showAsAction="never"
12         android:title="粘贴"/>
13     <item
14         android:id="@+id/action_menu_3"
15         android:orderInCategory="100"
16         android:showAsAction="never"
17         android:title="剪切"/>
18
19 </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)注册上下文菜单

1 this.registerForContextMenu(list);

2)生成上下文菜单

 1 //创建上下文菜单
 2     @Override
 3     public void onCreateContextMenu(ContextMenu menu, View v,
 4             ContextMenuInfo menuInfo) {
 5         // TODO Auto-generated method stub
 6         super.onCreateContextMenu(menu, v, menuInfo);
 7         //设置menu显示的内容
 8
 9         menu.setHeaderTitle("操作");  //菜单栏标题
10         menu.setHeaderIcon(R.drawable.icon_72);  //菜单栏图标
11
12         //动态添加上下文菜单
13 //        menu.add(1, 100, 1, "复制");
14 //        menu.add(1, 101, 1, "粘贴");
15 //        menu.add(1, 102, 1, "剪切");
16         //xml文件静态创建
17         MenuInflater inflater = getMenuInflater();
18         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
19     }
20     

3)响应上下文菜单项

 1 @Override
 2     public boolean onContextItemSelected(MenuItem item) {
 3         // TODO Auto-generated method stub
 4         switch (item.getItemId()) {
 5         case 100:
 6             Toast.makeText(ContextMenu_List.this, "选择的复制操作", 1).show();
 7             break;
 8         case 101:
 9             Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", 1).show();
10             break;
11         case 102:
12             Toast.makeText(ContextMenu_List.this, "选择的剪切操作", 1).show();
13             break;
14
15         default:
16             break;
17         }
18         return super.onContextItemSelected(item);
19
20     }

完整代码:

 1 package information;
 2
 3 import com.example.allcode.R;
 4
 5 import android.app.Activity;
 6 import android.os.Bundle;
 7 import android.view.ContextMenu;
 8 import android.view.MenuInflater;
 9 import android.view.MenuItem;
10 import android.view.View;
11 import android.view.ContextMenu.ContextMenuInfo;
12 import android.view.animation.AnimationUtils;
13 import android.view.animation.LayoutAnimationController;
14 import android.widget.AdapterView;
15 import android.widget.AdapterView.OnItemClickListener;
16 import android.widget.ListView;
17 import android.widget.Toast;
18
19 public class ContextMenu_List extends Activity{
20     private ListView list;
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         // TODO Auto-generated method stub
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.donghua_layout);
26
27
28         list = (ListView) findViewById(R.id.listView1);
29         this.registerForContextMenu(list);
30         //为列表视图中选中的项添加响应事件
31         list.setOnItemClickListener(new OnItemClickListener() {
32
33             @Override
34             public void onItemClick(AdapterView<?> parent, View arg1, int pos,
35                     long id) {
36                 // TODO Auto-generated method stub
37                  String result = parent.getItemAtPosition(pos).toString(); //获取选择项的值
38                     Toast.makeText(ContextMenu_List.this, "点击了 "+result, Toast.LENGTH_SHORT).show();//输出选中项消息
39             }
40         });
41
42
43     }
44     //创建上下文菜单
45     @Override
46     public void onCreateContextMenu(ContextMenu menu, View v,
47             ContextMenuInfo menuInfo) {
48         // TODO Auto-generated method stub
49         super.onCreateContextMenu(menu, v, menuInfo);
50         //设置menu显示的内容
51
52         menu.setHeaderTitle("操作");
53         menu.setHeaderIcon(R.drawable.icon_72);
54
55         //动态添加上下文菜单
56 //        menu.add(1, 100, 1, "复制");
57 //        menu.add(1, 101, 1, "粘贴");
58 //        menu.add(1, 102, 1, "剪切");
59         //xml文件静态创建
60         MenuInflater inflater = getMenuInflater();
61         inflater.inflate(R.menu.main, menu);//第一个参数是xml文件  第二个参数是menu菜单
62     }
63
64     @Override
65     public boolean onContextItemSelected(MenuItem item) {
66         // TODO Auto-generated method stub
67         switch (item.getItemId()) {
68         case 100:
69             Toast.makeText(ContextMenu_List.this, "选择的复制操作", 1).show();
70             break;
71         case 101:
72             Toast.makeText(ContextMenu_List.this, "选择的粘贴操作", 1).show();
73             break;
74         case 102:
75             Toast.makeText(ContextMenu_List.this, "选择的剪切操作", 1).show();
76             break;
77
78         default:
79             break;
80         }
81         return super.onContextItemSelected(item);
82
83     }
84
85 }

ContextMenu_List.java

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6
 7     <ListView
 8         android:id="@+id/listView1"
 9         android:entries="@array/list"
10
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content" >
13     </ListView>
14
15 </LinearLayout>

donghua_layout.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3
 4     <string-array name = "list">
 5         <item>山东大学</item>
 6         <item>山东科技大学</item>
 7         <item>山东理工大学</item>
 8         <item>山东建筑大学</item>
 9         <item>山东农业大学</item>
10         <item>济南大学</item>
11         <item>烟台大学</item>
12         <item>鲁东大学</item>
13         <item>临沂大学</item>
14         <item>聊城大学</item>
15     </string-array>
16 </resources>

arrays.xml

效果图:

时间: 2024-10-10 17:01:43

安卓开发_浅谈ContextMenu(上下文菜单)的相关文章

安卓开发_浅谈ListView(自定义适配器)

ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ,实现图片文字混合列表 1 package com.example.work; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 7 8 import android.R.in

安卓开发_浅谈Android动画(四)

Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属性动画类 方法 描述 setDuration(long duration) 设置动画持续时间的方法 setEvaluator(TypeEvaluator value) 设置插值计算的类型 setInterpolator(TimeInterpolator value) 设置时间插值器的类型 addUp

安卓开发_浅谈OptionsMenus(选项菜单)

Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开发人员编程来实现的,如果在开发应用程序时没有实现该功能,那么程序运行时按下手机的meun键是不会起作用的. 这里就先学习 选项菜单OptionsMenus 创建选项菜单有两种方式 一.xml文件静态创建 7 package information; 8 9 import com.example.al

安卓开发_浅谈SubMenu(子菜单)

子菜单,即点击菜单后出现一个菜单栏供选择 创建子菜单的步骤: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 (2) 调用SubMenu的add()方法,添加子菜单项 (3) 覆盖onContextItemSelected()方法,响应子菜单的单击事件 示例: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 1 //动态添加子

安卓开发_浅谈AsyncTask

前些天面试一个培训班,老师问了俩安卓的问题,结果都没答出来,(- ̄(OO) ̄)ブ 一个是关于Listview的,我没大用过啊,不会.一个是关于AsyncTask的,没听过,更没用过...( ⊙o⊙ )千真万确 会的一个没问啊.~(≧▽≦)/~ 现在就来学习一下AsyncTask. 一.先介绍一下AsyncTask: 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验.但是在子线程中无法去操作主线程(

安卓开发_浅谈ListView之分页列表

前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据过大时,就可能会造成解析时间过长,占用内存过大等问题. 这时候想到用分页列表来显示这些数据,即每次只显示一个屏幕所能容纳条数的列表项数据,当用户手指向下拉动的时候,才再加载一个屏幕所能容纳的条数的数据,这样就解决了上述问题. -------------------------------------

安卓开发_浅谈Notification(通知栏)

Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到NotificationManager对象: 第二步:对Notification的一些属性进行设置比如:内容,图标,标题,相应notification的动作进行处理等等: 第三步:通过NotificationManager对象的notify()方法来执行一个notification的快讯:   第四

安卓开发_浅谈自定义组件

在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成.其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器. 其本身也是View类的子类. 在实际开发中,View类还不足以满足程序所有的需求.这时,便可以通过继承View类来开发自己的组件. 开发自定义组件的步骤: 1.创建一个继承android.view.View类的View类,并且重写构造方法. 2.根据需要重写相应的方法. 3.创建并实例化自定义View类,并将其添加到布局

安卓开发_浅谈DatePicker(日期选择器)

DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年.月.日的日期数据并允许用户对其修改.如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateChangedListener监听器. 示例: 一.全局模式 1.布局文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="htt