android的上下文菜单---context menu

转自:http://zhyq0826.iteye.com/blog/1049222

android的菜单有三种:

Options Menu
当用户按下menu button按钮时显示的菜单
Context Menu        当用户长久按住屏幕,即被注册显示上下文菜单的视图时显示的菜单 Submenu
当用户按下一个菜单的某个选项时弹出的子菜单
现在演示一个上下文菜单。
main.xml布局文件:此布局文件定义了listview,用来显示一组列表,稍后上下文菜单将被注册到该listview,并且响应该listview。
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/layout"   
  4.     android:layout_width="fill_parent" android:layout_height="fill_parent">  
  5.     <ListView android:id="@+id/lv_list" android:layout_width="wrap_content"  
  6.         android:layout_height="fill_parent">  
  7.     </ListView>  
  8. </RelativeLayout>  
item.xml布局文件,用来显示listview中的一个单独的控件
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/layout"  
  4.     android:layout_width="fill_parent" android:layout_height="fill_parent">  
  5.         <TextView android:id="@+id/tv" android:layout_width="wrap_content"  
  6.             android:layout_height="fill_parent"  
  7.             android:textSize="20dip" >  
  8.         </TextView>  
  9. </RelativeLayout>
 
 在layout下新建一个menu文件夹,在建一个menu.xml布局文件
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">
  3.     <item android:id="@+id/new_game" android:title="新游戏" />
  4.     <item android:id="@+id/help" android:title="寻求帮助" />
  5.     <item android:id="@+id/addnew" android:title="添加新游戏" />
  6.     <item android:id="@+id/delete" android:title="删除游戏" />
  7. </menu> 
 主activity代码
Java代码   收藏代码
  1. package org.ynu.android;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.view.ContextMenu;  
  9. import android.view.ContextMenu.ContextMenuInfo;  
  10. import android.view.Menu;  
  11. import android.view.MenuInflater;  
  12. import android.view.MenuItem;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.AdapterView.AdapterContextMenuInfo;
  16. import android.widget.Button;  
  17. import android.widget.ListView;  
  18. import android.widget.SimpleAdapter;  
  19. import android.widget.TextView;  
  20. import android.widget.Toast;  
  21.   
  22. public class MenuActivity extends Activity {
  23.     private ListView lv;  
  24.     
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.main);  
  29.        
  30.         //如定义了一个listview控件  
  31.         ArrayList<HashMap<String, String>> list = 
  32.                 new ArrayList<HashMap<String,String>>();
  33.         
  34.         HashMap<String, String> map1 = new HashMap<String, String>();  
  35.         map1.put("item""第一个菜单项");  
  36.         HashMap<String, String> map2 = new HashMap<String, String>();  
  37.         map2.put("item""第二个菜单项");  
  38.         HashMap<String, String> map3 = new HashMap<String, String>();  
  39.         map3.put("item""第三个菜单项");  
  40.         HashMap<String, String> map4 = new HashMap<String, String>();  
  41.         map4.put("item""第四个菜单项");  
  42.         HashMap<String, String> map5 = new HashMap<String, String>();  
  43.         map5.put("item""第五个菜单项");  
  44.         list.add(map1);  
  45.         list.add(map2);  
  46.         list.add(map3);  
  47.         list.add(map4);  
  48.         list.add(map5);  
  49.           
  50.         //初始化该控件  
  51.         lv=(ListView)findViewById(R.id.lv_list);  
  52.           
  53.         //定义适配器 参数为该显示信息用的布局文件 以及显示信息用的控件,这里是一个textview控件  
  54.         SimpleAdapter adapter = new SimpleAdapter(this, list, 
  55.                 R.layout.item, new String[]{"item"}, new int[]{R.id.tv});
  56.         
  57.         lv.setAdapter(adapter);  
  58.           
  59.         //注册上下文菜单显示用的view  
  60.         registerForContextMenu(this.lv);  
  61.     }  
  62.   
  63.     //该方法在注册的view被被长按时创建该view的上下文菜单
  64.     @Override  
  65.     public void onCreateContextMenu(ContextMenu menu, View v, 
  66.             ContextMenuInfo menuInfo) {
  67.         
  68.         MenuInflater inflater = getMenuInflater();  
  69.         inflater.inflate(R.menu.menu, menu);  
  70.         super.onCreateContextMenu(menu, v, menuInfo);  
  71.     }  
  72.   
  73.     //当菜单某个选项被点击时调用该方法  
  74.     @Override  
  75.     public boolean onContextItemSelected(MenuItem item) {
  76.         AdapterContextMenuInfo infor = (AdapterContextMenuInfo)item.getMenuInfo();
  77.         switch(item.getItemId()) {
  78.         case R.id.help:  
  79.             Toast.makeText(this"请求帮助", Toast.LENGTH_LONG).show();
  80.             return true;
  81.         case R.id.addnew:  
  82.             Toast.makeText(this"添加新的", Toast.LENGTH_LONG).show();
  83.             return true;  
  84.         case R.id.delete:  
  85.             Toast.makeText(this"删除信息", Toast.LENGTH_LONG).show();
  86.             return true;  
  87.         case R.id.new_game:  
  88.             Toast.makeText(this"新游戏", Toast.LENGTH_LONG).show();
  89.             return true;  
  90.             default:  
  91.                 return super.onContextItemSelected(item);
  92.         }  
  93.     }  
  94.     
  95.     //当上下文菜单关闭时调用的方法
  96.     @Override  
  97.     public void onContextMenuClosed(Menu menu) {
  98.         super.onContextMenuClosed(menu);
  99.     }
  100. }
 效果图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值