Android 的上下文菜单: Context Menu,registerForContextMenu(getListView())

概述:

Android 的上下文菜单类似于 PC 上的右键菜单。当为一个视图注册了上下文菜单之后,长按(2 秒左右)这个视图对象就会弹出一个浮动菜单,即上下文菜单。任何视图都可以注册上下文菜单,不过,最常见的是用于列表视图ListView的item。

注意:Android 的上下文菜单不支持图标或快捷键。

 

创建一个上下文菜单的步骤:

1. 覆盖 Activity 的 onCreateContenxtMenu() 方法,调用 Menu 的 add 方法添加菜单项(MenuItem)。

2. 覆盖 Activity 的 onContextItemSelected() 方法,响应上下文菜单菜单项的单击事件。

3. 调用 registerForContextMenu() 方法,为视图注册上下文菜单。


示例:

MainActivity.java 文件:

  1. //file name: MainActivity.java  
  2. package hi.braincol.local.contextMenu;  
  3. import android.app.ListActivity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.Menu;  
  7. import android.view.MenuItem;  
  8. import android.view.ContextMenu.ContextMenuInfo;  
  9. import android.view.View;  
  10. import android.widget.AdapterView.AdapterContextMenuInfo;  
  11. import android.widget.ArrayAdapter;  
  12. import android.util.Log;  
  13. public class MainActivity extends ListActivity {  
  14.       
  15.     private static final int ITEM1 = Menu.FIRST;  
  16.     private static final int ITEM2 = Menu.FIRST+1;  
  17.     private static final int ITEM3 = Menu.FIRST+2;  
  18.       
  19.     /** Called when the activity is first created. */ 
  20.     @Override 
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);     
  23.         showListView();  
  24.           
  25.         //为 ListView 的所有 item 注册 ContextMenu  
  26.         registerForContextMenu(getListView());  
  27.         //这里的registerForContextMenu()也可以用下面的语句替代  
  28.         //getListView().setOnCreateContextMenuListener(this);  
  29.     }  
  30.       
  31.     private void showListView(){  
  32.         String[] mString = new String[]{  
  33.                 "路飞-Monkey D Luffy",   
  34.                 "奈美-Nami",   
  35.                 "卓洛-Zoro",  
  36.                 "山治-Sanji",   
  37.                 "尼可·罗宾-Ms. All Sunday",   
  38.                 "乌索普-usoppu",   
  39.                 "托尼托尼·乔巴-Tony Tony Chopper",  
  40.         };  
  41.         ArrayAdapter<String> mla = new ArrayAdapter<String>(MainActivity.this,   
  42.                 R.layout.main, mString);  
  43.         MainActivity.this.setListAdapter(mla);        
  44.     }  
  45.       
  46.     //上下文菜单,本例会通过长按条目激活上下文菜单  
  47.     @Override 
  48.     public void onCreateContextMenu(ContextMenu menu, View view,   
  49.             ContextMenuInfo menuInfo) {  
  50.         menu.setHeaderTitle("人物简介");  
  51.         //添加菜单项  
  52.         menu.add(0, ITEM1, 0"特长");  
  53.         menu.add(0, ITEM2, 0"战斗力");  
  54.         menu.add(0, ITEM3, 0"经典语录");  
  55.     }  
  56.       
  57.     //菜单单击响应  
  58.     @Override 
  59.     public boolean onContextItemSelected(MenuItem item){  
  60.         //获取当前被选择的菜单项的信息  
  61.         //AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();  
  62.         //Log.i("braincol",String.valueOf(info.id));          
  63.         switch(item.getItemId()){  
  64.         case ITEM1:  
  65.             //在这里添加处理代码  
  66.               
  67.             break;  
  68.         case ITEM2:  
  69.             //在这里添加处理代码  
  70.               
  71.             break;      
  72.         case ITEM3:  
  73.             //在这里添加处理代码  
  74.               
  75.             break;  
  76.         }  
  77.         return true;  
  78.     }  
  79.       
  80. }  

main.xml 布局文件:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:id="@+id/myTextView" 
  4.     android:textSize="20sp" 
  5.     android:layout_width="fill_parent" 
  6.     android:layout_height="fill_parent" 
  7.     android:text="@string/hello" 
  8.     />  

运行结果:

ContextMenu  menu


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值