android ContextMenu

本文介绍了一种在Android应用中实现上下文菜单的方法。通过为特定的View对象注册上下文菜单,用户可以通过长按该对象来呼出菜单。示例展示了如何在两个EditText控件上分别创建不同的上下文菜单,并响应用户的菜单选择。
ContextMenu 继承自 Menu。上下文菜单不同于选项菜单,选项菜单服务于Activity,而上下文菜单是注册到某个View对象上的。如果一个View对象注册了上下文菜单,用户可以通过长按(约2秒) 该View对象上以呼出上下文菜单。 
    上下文菜单不支持快捷键(shortcut),其菜单选项也不能附带图标,但是可以为上下文菜单的标题指定图标 
  下面是一个ContextMenu的小例子,运行效果如下: 

 

 

Activity类 
Java代码   收藏代码
  1. package xiaohang.zhimeng;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.MenuItem;  
  7. import android.view.View;  
  8. import android.view.ContextMenu.ContextMenuInfo;  
  9. import android.widget.EditText;  
  10.   
  11. public class Activity01 extends Activity {  
  12.     final int MENU1 = 1;  
  13.     final int MENU2 = 2;  
  14.     final int MENU3 = 3;  
  15.     final int MENU4 = 4;  
  16.     final int MENU5 = 5;  
  17.       
  18.       
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.           
  24.         //为两个文本框注册上下文菜单  
  25.         this.registerForContextMenu(findViewById(R.id.EditText01));  
  26.         this.registerForContextMenu(findViewById(R.id.EditText02));  
  27.     }  
  28.       
  29.     //添加上下文菜单  
  30.     @Override  
  31.     public void onCreateContextMenu(ContextMenu menu, View v,  
  32.             ContextMenuInfo menuInfo) {  
  33.         //此方法在每次调用上下文菜单时都会被调用一次  
  34.         menu.setHeaderIcon(R.drawable.car);  
  35.         if (v==findViewById(R.id.EditText01)) {  
  36.             menu.add(0, MENU1, 0, R.string.mi1);  
  37.             menu.add(0, MENU2, 0, R.string.mi2);  
  38.             menu.add(0, MENU3, 0, R.string.mi3);  
  39.         }  
  40.         else if (v==findViewById(R.id.EditText02)) {  
  41.             menu.add(0, MENU4, 0, R.string.mi4);  
  42.             menu.add(0, MENU5, 0, R.string.mi5);  
  43.         }  
  44.     }  
  45.       
  46.     //响应上下文菜单  
  47.     @Override  
  48.     public boolean onContextItemSelected(MenuItem item) {  
  49.         switch (item.getItemId()) {  
  50.         case MENU1:  
  51.         case MENU2:  
  52.         case MENU3:  
  53.             EditText et1 = (EditText)this.findViewById(R.id.EditText01);  
  54.             et1.append("\n" + item.getTitle() + "被按下");  
  55.             break;  
  56.         case MENU4:  
  57.         case MENU5:  
  58.             EditText et2 = (EditText)this.findViewById(R.id.EditText02);  
  59.             et2.append("\n" + item.getTitle() + "被按下");  
  60.             break;  
  61.         }  
  62.         return true;  
  63.     }  
  64. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值