【转】微信中MMAlert(半透明底部弹出菜单)的使用介绍

原文地址:http://blog.csdn.net/singwhatiwanna/article/details/8892930

果大家时常用过微信或者用过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     public static 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         final int 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
28         list.setOnItemClickListener(new OnItemClickListener(){
29             @Override
30             public void onItemClick(AdapterView<?> parent, View view, int position, long id)
31             {
32                 if (!(title == null || title.equals("")) && position - 1 >= 0)
33                 {
34                     alertDo.onClick(position - 1);
35                     dlg.dismiss();
36                     list.requestFocus();
37                 }
38                 else
39                 {
40                     alertDo.onClick(position);
41                     dlg.dismiss();
42                     list.requestFocus();
43                 }
44
45             }
46         });
47         // set a large value put it in bottom
48         Window w = dlg.getWindow();
49         WindowManager.LayoutParams lp = w.getAttributes();
50         lp.x = 0;
51         final int cMakeBottom = -1000;
52         lp.y = cMakeBottom;
53         lp.gravity = Gravity.BOTTOM;
54         dlg.onWindowAttributesChanged(lp);
55         dlg.setCanceledOnTouchOutside(true);
56         if (cancelListener != null)
57             dlg.setOnCancelListener(cancelListener);
58
59         dlg.setContentView(layout);
60         dlg.show();
61
62         return dlg;
63     }

2.  如何使用MMAlert?很简单!

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

代码下载

http://download.csdn.net/detail/singwhatiwanna/5338394

下载地址二:

  http://pan.baidu.com/s/1i3l82eL

时间: 2024-11-08 05:27:15

【转】微信中MMAlert(半透明底部弹出菜单)的使用介绍的相关文章

Android 长按Listview 每个item底部弹出菜单

android界面中,有一个功能是点击listview的每个item,下方弹出两个菜单,可以点击进入别的界面,这个功能可以使用开源项目expandablelistview,的确是可以实现,但发现导入的代码过多,显得很臃肿,经过师傅指点,我采用的是如下方法,步骤如下: 1.新建一个listview,需要在外层套一层scrollview,不过使用scrollview会导致listview的高度只有一个item,需要使用自定义的listview,代码如下: package allone.verbank

微信小程序动画之弹出菜单

用微信小程序做了一个动画,效果如上图: 代码: js: Page({ data: { isPopping: false, animPlus: {}, animCollect: {}, animTranspond: {}, animInput: {}, animCloud:{}, aninWrite:{}, }, //点击弹出 plus: function () { if (this.data.isPopping) { //缩回动画 this.popp(); this.setData({ isPo

运用安卓CreateOptionsMenu和onCreateContextMenu菜单,模拟微信聊天界面长按弹出菜单选项。

1 package com.lixu.menu2; 2 3 import java.util.ArrayList; 4 5 import android.app.Activity; 6 import android.os.Bundle; 7 import android.view.ContextMenu; 8 import android.view.Menu; 9 import android.view.MenuItem; 10 import android.view.View; 11 impo

Android 底部弹出Dialog(横向满屏)

项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay_share.xml) 1 <?xml version="1.0" encoding="utf-8"?> 2 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

iOS_21团购_顶部菜单和弹出菜单联动

最后效果图: 各控件关系图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >\ 各控件关系图2: 点击Dock上面的buttonDockItem, 创建经导航控制器包装的DealListController, 而且加入到主控制器的右側空间 // // Deal

Swing-JPopupMenu弹出菜单用法-入门

弹出菜单是GUI程序中非常常见的一种控件.它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”.“属性”等菜单的弹出菜单.Swing中的弹出菜单是JPopupMenu,它的基本性质与JMenu类似,可以使用add方法给它内部添加JMenu或者JMenuItem.手动显示JPopupMenu时,需使用show(parentComponent, x, y)方法,指定父控件和显示坐标.用户的操作习惯是在右击某个 控件时显示弹出菜单,那么需要使用component.se

Delphi XE7实现的任意位置弹出菜单

Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在Java开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自己在网上找了一个例子,修改后实现了我的在任意位置弹出菜单需求!全部代码如下: { 功能:DelphiXE7里面实现的弹出菜单 ------------------------------------------------------------------------------ 说明:实现在任意

拍照选择图片(Activity底部弹出)

效果图如下: 第一步 : 显示出的布局文件:alert_dialog.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_hei

转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。

最近要改客户端,需要实现一个从底部弹出的popuwindow,像我这种渣渣android技术,能整出popuwindow但是整不出动画,百度之,记录一下. 从下面这个地址转的 http://blog.csdn.net/yxhuang2008/article/details/42617805 最近因为要用到PopupWindow,所以,就在网上搜索了一下,发现挺多关于这样的文章,现在我把它们整理了一下. 1.Android PopupWindow 的使用技巧,http://www.cnblogs.