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

简介: 长下文菜单,即长按view显示一个菜单栏 与OptionMenu的区别OptionMenu对应的是activity,一个activity只能拥有一个选项菜单ContextMenu对应的是View,每个View都可以设置上下文菜单一般情况下ContextMenu常用语ListView或者GridView;     创建和响应上下文菜单过程: 1.在activity的onCreate(...)方法中为一个view注册上下文菜单 2.在onCreateContextMenuInfo(...)中生成上下文菜单。

长下文菜单,即长按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     

 在onCreateContextMenu()方法中获得点击的列表项

1 AdapterContextMenuInfo menuInfos = (AdapterContextMenuInfo) menuInfo; 
2         curItemPosition = menuInfos.position;(curItemPosition 代表点击列表中第几项出现的上下文菜单

 

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

效果图:

相关文章
|
6天前
|
编解码 Java Android开发
通义灵码:在安卓开发中提升工作效率的真实应用案例
本文介绍了通义灵码在安卓开发中的应用。作为一名97年的聋人开发者,我在2024年Google Gemma竞赛中获得了冠军,拿下了很多项目竞赛奖励,通义灵码成为我的得力助手。文章详细展示了如何安装通义灵码插件,并通过多个实例说明其在适配国际语言、多种分辨率、业务逻辑开发和编程语言转换等方面的应用,显著提高了开发效率和准确性。
|
5天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
18 5
|
3天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
5天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
16 3
|
7天前
|
存储 IDE 开发工具
探索Android开发之旅:从新手到专家
【10月更文挑战第26天】在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何在Android平台上从零开始,最终成为一名熟练的开发者。通过简单易懂的语言和实际代码示例,本文将引导你了解Android开发的基础知识、关键概念以及如何实现一个基本的应用程序。无论你是编程新手还是希望扩展你的技术栈,这篇文章都将为你提供价值和启发。让我们开始吧!
|
13天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
42 5
|
12天前
|
设计模式 IDE Java
探索安卓开发:从新手到专家的旅程
【10月更文挑战第22天】 在数字时代的浪潮中,移动应用开发如同一座金矿,吸引着无数探险者。本文将作为你的指南针,指引你进入安卓开发的广阔天地。我们将一起揭开安卓平台的神秘面纱,从搭建开发环境到掌握核心概念,再到深入理解安卓架构。无论你是初涉编程的新手,还是渴望进阶的开发者,这段旅程都将为你带来宝贵的知识和经验的财富。让我们开始吧!
|
2天前
|
移动开发 Java Android开发
探索Android与iOS开发的差异性与互联性
【10月更文挑战第32天】在移动开发的大潮中,Android和iOS两大平台各领风骚。本文将深入浅出地探讨这两个平台的开发差异,并通过实际代码示例,展示如何在各自平台上实现相似的功能。我们将从开发环境、编程语言、用户界面设计、性能优化等多个角度进行对比分析,旨在为开发者提供跨平台开发的实用指南。
18 0
|
12天前
|
搜索推荐 Android开发 UED
安卓开发中的自定义视图:打造个性化用户界面
【10月更文挑战第22天】在安卓应用的海洋中,如何让你的应用脱颖而出?一个独特且直观的用户界面(UI)至关重要。本文将引导你通过自定义视图来打造个性化的用户体验,从基础的视图绘制到触摸事件的处理,我们将一步步深入探讨。准备好了吗?让我们开始吧!
|
12天前
|
Android开发
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
我是一位Android工程师,用通义灵码的AS插件做开发工作助手,对比之前没有灵码,现在提效了60%
28 0