现在的位置: 首页 > 综合 > 正文

android的上下文菜单—context menu

2017年11月05日 ⁄ 综合 ⁄ 共 5056字 ⁄ 字号 评论关闭

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.             >  
  9.         </TextView>  
  10. </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.   
  24.     private ListView lv;  
  25.       
  26.     /** Called when the activity is first created. */  
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.        
  32.         //如定义了一个listview控件  
  33.         ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();  
  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, R.layout.item, new String[]{"item"}, new int[]{R.id.tv});  
  55.         lv.setAdapter(adapter);  
  56.           
  57.         //注册上下文菜单显示用的view  
  58.         registerForContextMenu(this.lv);  
  59.     }  
  60.   
  61.     //该方法在注册的view被被长按时创建该view的上下文菜单  
  62.     @Override  
  63.     public void onCreateContextMenu(ContextMenu menu, View v,  
  64.             ContextMenuInfo menuInfo) {  
  65.         // TODO Auto-generated method stub  
  66.         MenuInflater inflater = getMenuInflater();  
  67.         inflater.inflate(R.menu.menu, menu);  
  68.         super.onCreateContextMenu(menu, v, menuInfo);  
  69.     }  
  70.   
  71.     //当菜单某个选项被点击时调用该方法  
  72.     @Override  
  73.     public boolean onContextItemSelected(MenuItem item) {  
  74.         // TODO Auto-generated method stub  
  75.         AdapterContextMenuInfo infor = (AdapterContextMenuInfo)item.getMenuInfo();  
  76.         switch(item.getItemId())  
  77.         {  
  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.         // TODO Auto-generated method stub  
  99.         super.onContextMenuClosed(menu);  
  100.     }  
  101.   
  102. }  
 效果图

 

抱歉!评论已关闭.