1. 程式人生 > >微信中MMAlert(半透明底部彈出選單)的使用介紹

微信中MMAlert(半透明底部彈出選單)的使用介紹

如果大家時常用過微信或者用過iphone,就會發現有種從底部彈出的半透明選單,這種選單風格優美並且使用者體驗良好,先看一下效果。

MMAlert來自微信開放平臺的sdk示例,其示例的程式碼有點亂,我做了刪減和整理,只保留了MMAlert這個類的一部分功能,即只保留了實現上述效果的那個函式,因為其他函式比較簡單,就是普通的AlertDialog,我覺得大家都懂,所以直接刪掉了。

程式碼介紹

1 .  下面這段程式碼其實蠻好理解的,本質就是new一個對話方塊,然後將其放置在底部,為其設定theme和style,theme和style寫的蠻好理解的,具體大家可以看原始碼。資料呈現用的是Listview,為此我們需要new一個BaseAdapter物件來管理資料,BaseAdapter沒什麼特殊之處,很好理解,具體請看程式碼。

  1. /** 
  2.  * @param context 
  3.  *            Context. 
  4.  * @param title 
  5.  *            The title of this AlertDialog can be null . 
  6.  * @param items 
  7.  *            button name list. 
  8.  * @param alertDo 
  9.  *            methods call Id:Button + cancel_Button. 
  10.  * @param exit 
  11.  *            Name can be null.It will be Red Color
     
  12.  * @return A AlertDialog 
  13.  */
  14. publicstatic Dialog showAlert(final Context context, final String title, final String[] items, String exit,   
  15.         final OnAlertSelectId alertDo, OnCancelListener cancelListener)  
  16. {  
  17.     String cancel = context.getString(R.string.app_cancel);  
  18.     final Dialog dlg = 
    new Dialog(context, R.style.MMTheme_DataSheet);  
  19.     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  20.     LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.alert_dialog_menu_layout, null);  
  21.     finalint cFullFillWidth = 10000;  
  22.     layout.setMinimumWidth(cFullFillWidth);  
  23.     final ListView list = (ListView) layout.findViewById(R.id.content_list);  
  24.     AlertAdapter adapter = new AlertAdapter(context, title, items, exit, cancel);  
  25.     list.setAdapter(adapter);  
  26.     list.setDividerHeight(0);  
  27.     list.setOnItemClickListener(new OnItemClickListener(){  
  28.         @Override
  29.         publicvoid onItemClick(AdapterView<?> parent, View view, int position, long id)  
  30.         {  
  31.             if (!(title == null || title.equals("")) && position - 1 >= 0)  
  32.             {  
  33.                 alertDo.onClick(position - 1);  
  34.                 dlg.dismiss();  
  35.                 list.requestFocus();  
  36.             }  
  37.             else
  38.             {  
  39.                 alertDo.onClick(position);  
  40.                 dlg.dismiss();  
  41.                 list.requestFocus();  
  42.             }  
  43.         }  
  44.     });  
  45.     // set a large value put it in bottom
  46.     Window w = dlg.getWindow();  
  47.     WindowManager.LayoutParams lp = w.getAttributes();  
  48.     lp.x = 0;  
  49.     finalint cMakeBottom = -1000;  
  50.     lp.y = cMakeBottom;  
  51.     lp.gravity = Gravity.BOTTOM;  
  52.     dlg.onWindowAttributesChanged(lp);  
  53.     dlg.setCanceledOnTouchOutside(true);  
  54.     if (cancelListener != null)  
  55.         dlg.setOnCancelListener(cancelListener);  
  56.     dlg.setContentView(layout);  
  57.     dlg.show();  
  58.     return dlg;  
  59. }  


2.  如何使用MMAlert?很簡單!

  1. findViewById(R.id.send_img).setOnClickListener(new View.OnClickListener() {  
  2.     @Override
  3.     publicvoid onClick(View v) {  
  4.         MMAlert.showAlert(SendToWXActivity.this, getString(R.string.send_img),   
  5.                 SendToWXActivity.this.getResources().getStringArray(R.array.send_img_item),  
  6.                 nullnew MMAlert.OnAlertSelectId(){  
  7.             @Override
  8.             publicvoid onClick(int whichButton) {                        
  9.                 switch(whichButton){  
  10.                 case MMAlertSelect1: {  
  11.                     break;  
  12.                 }  
  13.                 case MMAlertSelect2: {  
  14.                     break;  
  15.                 }  
  16.                 case MMAlertSelect3: {  
  17.                     break;  
  18.                 }  
  19.                 default:  
  20.                     break;  
  21.                 }  
  22.             }  
  23.         });  
  24.     }  
  25. });  


程式碼下載