看其它应用软件时使用了很多的弹出菜单,蛮好的,顺带学习了下,写了个小DEMO,里面穿插的讲了下系统级的dialog使用小巧门,希望与大家交流学习。。下面来看代码:

     


  1. package com.xiaoma.popupmenu.demo; 
  2.  
  3. import android.app.Activity; 
  4. import android.app.Dialog; 
  5. import android.app.ProgressDialog; 
  6. import android.os.Bundle; 
  7. import android.util.Log; 
  8. import android.view.MenuInflater; 
  9. import android.view.MenuItem; 
  10. import android.view.View; 
  11. import android.view.View.OnClickListener; 
  12. import android.widget.Button; 
  13. import android.widget.PopupMenu; 
  14. import android.widget.Toast; 
  15. import android.widget.PopupMenu.OnMenuItemClickListener; 
  16.  
  17. /**   
  18. * @Title: PopupMenuDemoActivity.java 
  19. * @Package com.xiaoma.popupmenu.demo 
  20. * @Description: 弹出式菜单测试类 
  21. * @author MZH 
  22. */ 
  23. public class PopupMenuDemoActivity extends Activity implements OnClickListener,OnMenuItemClickListener{ 
  24.      
  25.     private Button show; 
  26.      
  27.     /** Called when the activity is first created. */ 
  28.     @Override 
  29.     public void onCreate(Bundle savedInstanceState) { 
  30.         super.onCreate(savedInstanceState); 
  31.         setContentView(R.layout.main); 
  32.         init(); 
  33.     } 
  34.      
  35.     /* 
  36.      * 初始化实现 
  37.      */ 
  38.     private void init(){ 
  39.         show  = (Button)findViewById(R.id.button1); 
  40.         show.setOnClickListener(this); 
  41.     } 
  42.  
  43.     /* 
  44.      * 添加监听器(non-Javadoc) 
  45.      * @see android.view.View.OnClickListener#onClick(android.view.View) 
  46.      */ 
  47.     @Override 
  48.     public void onClick(View v) { 
  49.         if(v.getId() == R.id.button1){ 
  50.             showPopup(v); 
  51.         } 
  52.     } 
  53.      
  54.     /* 
  55.      * 弹出对话框实现 
  56.      */ 
  57.     private void showPopup(View v){ 
  58.         PopupMenu popup = new PopupMenu(getApplicationContext(),v);  
  59.         popup.setOnMenuItemClickListener(this); 
  60.         MenuInflater inflater = popup.getMenuInflater(); 
  61.         inflater.inflate(R.menu.menutest, popup.getMenu()); 
  62.         popup.show(); 
  63.     } 
  64.      
  65.     /* 
  66.      * 给选择的项添加监听器(non-Javadoc) 
  67.      */ 
  68.     @Override 
  69.     public boolean onMenuItemClick(MenuItem item) { 
  70.         switch (item.getItemId()) { 
  71.         case R.id.new_game: 
  72.             Log.i("KKK""奇怪"); 
  73.             ShowDialog(item.getTitle()); 
  74.             break
  75.         case R.id.help: 
  76.             ShowDialog(item.getTitle()); 
  77.             break
  78.         case R.id.file: 
  79.             ShowDialog(item.getTitle()); 
  80.             break
  81.         case R.id.create_new: 
  82.             ShowDialog(item.getTitle()); 
  83.             break
  84.         case R.id.open: 
  85.             ShowDialog(item.getTitle()); 
  86.             break
  87.         default
  88.             break
  89.         } 
  90.         return false
  91.     } 
  92.      
  93.     /* 
  94.      * 弹出消息方法实现 
  95.      * 因为安卓系统中也自带这样一个临时弹出dialog的方法 
  96.      * showDialog(int id),所以小马在此处违背了下一般的命名 
  97.      * 规则,起名:ShowDialog(),下面顺带讲下系统自带的临时dialog的实现 
  98.      */ 
  99.     private void ShowDialog(CharSequence ch){ 
  100.         Toast.makeText(getApplicationContext(), ch, Toast.LENGTH_SHORT).show(); 
  101.     } 
  102.      
  103.      
  104.     /** 
  105.      * 在使用系统级自带的showDialog(int id)方法时,必须重载下面这个方法哦 
  106.      */ 
  107.     @Override 
  108.     protected Dialog onCreateDialog(int id) { 
  109.         ProgressDialog dialog = new ProgressDialog(this); 
  110.         dialog.setMessage("小马临时放的字符串一"); 
  111.         return dialog; 
  112.     } 
  113.      
  114.     /** 
  115.      * 在使用系统级自带的showDialog(int id,int id, Bundle args)方法时, 
  116.      * 必须重载下面这个方法 
  117.      * id:dialog的ID 
  118.      * args为提供给showDialog的第二个方法 
  119.      */ 
  120.     @Override 
  121.     protected Dialog onCreateDialog(int id, Bundle args) { 
  122.         ProgressDialog dialog = new ProgressDialog(this); 
  123.         dialog.setMessage("小马临时放的字符串二"); 
  124.         return dialog; 
  125.     } 

   加载的菜单布局如下:

  


  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" 
  4.           android:icon="@drawable/ic_launcher" 
  5.           android:title="新游戏" 
  6.           android:showAsAction="ifRoom"/> 
  7.     <item android:id="@+id/help" 
  8.           android:icon="@drawable/ic_launcher" 
  9.           android:title="帮助" /> 
  10.      
  11.      <item android:id="@+id/file" 
  12.           android:title="嵌套" > 
  13.         <menu> 
  14.             <item android:id="@+id/create_new" 
  15.                   android:title="开始新游戏" /> 
  16.             <item android:id="@+id/open" 
  17.                   android:title="开始" /> 
  18.         </menu> 
  19.     </item> 
  20.      
  21.      <group android:id="@+id/group_delete"> 
  22.         <item android:id="@+id/menu_archive" 
  23.               android:title="组员一" /> 
  24.         <item android:id="@+id/menu_delete" 
  25.               android:title="组员 二" /> 
  26.     </group> 
  27.  
  28. </menu> 

   很简单的实现,每天进步一点点,吼吼。。学习再学习!加油。。。