微信中MMAlert(半透明底部彈出選單)的使用介紹
阿新 • • 發佈:2019-02-10
如果大家時常用過微信或者用過iphone,就會發現有種從底部彈出的半透明選單,這種選單風格優美並且使用者體驗良好,先看一下效果。
MMAlert來自微信開放平臺的sdk示例,其示例的程式碼有點亂,我做了刪減和整理,只保留了MMAlert這個類的一部分功能,即只保留了實現上述效果的那個函式,因為其他函式比較簡單,就是普通的AlertDialog,我覺得大家都懂,所以直接刪掉了。
程式碼介紹
1 . 下面這段程式碼其實蠻好理解的,本質就是new一個對話方塊,然後將其放置在底部,為其設定theme和style,theme和style寫的蠻好理解的,具體大家可以看原始碼。資料呈現用的是Listview,為此我們需要new一個BaseAdapter物件來管理資料,BaseAdapter沒什麼特殊之處,很好理解,具體請看程式碼。
- /**
- * @param context
- * Context.
- * @param title
- * The title of this AlertDialog can be null .
- * @param items
- * button name list.
- * @param alertDo
- * methods call Id:Button + cancel_Button.
- * @param exit
-
* Name can be null.It will be Red Color
- * @return A AlertDialog
- */
- publicstatic Dialog showAlert(final Context context, final String title, final String[] items, String exit,
- final OnAlertSelectId alertDo, OnCancelListener cancelListener)
- {
- String cancel = context.getString(R.string.app_cancel);
-
final Dialog dlg =
- LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.alert_dialog_menu_layout, null);
- finalint cFullFillWidth = 10000;
- layout.setMinimumWidth(cFullFillWidth);
- final ListView list = (ListView) layout.findViewById(R.id.content_list);
- AlertAdapter adapter = new AlertAdapter(context, title, items, exit, cancel);
- list.setAdapter(adapter);
- list.setDividerHeight(0);
- list.setOnItemClickListener(new OnItemClickListener(){
- @Override
- publicvoid onItemClick(AdapterView<?> parent, View view, int position, long id)
- {
- if (!(title == null || title.equals("")) && position - 1 >= 0)
- {
- alertDo.onClick(position - 1);
- dlg.dismiss();
- list.requestFocus();
- }
- else
- {
- alertDo.onClick(position);
- dlg.dismiss();
- list.requestFocus();
- }
- }
- });
- // set a large value put it in bottom
- Window w = dlg.getWindow();
- WindowManager.LayoutParams lp = w.getAttributes();
- lp.x = 0;
- finalint cMakeBottom = -1000;
- lp.y = cMakeBottom;
- lp.gravity = Gravity.BOTTOM;
- dlg.onWindowAttributesChanged(lp);
- dlg.setCanceledOnTouchOutside(true);
- if (cancelListener != null)
- dlg.setOnCancelListener(cancelListener);
- dlg.setContentView(layout);
- dlg.show();
- return dlg;
- }
2. 如何使用MMAlert?很簡單!
- findViewById(R.id.send_img).setOnClickListener(new View.OnClickListener() {
- @Override
- publicvoid onClick(View v) {
- MMAlert.showAlert(SendToWXActivity.this, getString(R.string.send_img),
- SendToWXActivity.this.getResources().getStringArray(R.array.send_img_item),
- null, new MMAlert.OnAlertSelectId(){
- @Override
- publicvoid onClick(int whichButton) {
- switch(whichButton){
- case MMAlertSelect1: {
- break;
- }
- case MMAlertSelect2: {
- break;
- }
- case MMAlertSelect3: {
- break;
- }
- default:
- break;
- }
- }
- });
- }
- });
程式碼下載