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

果大家时常用过微信或者用过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
*/
public static 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 = new Dialog(context, R.style.MMTheme_DataSheet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.alert_dialog_menu_layout, null);
final int 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
public void 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;
final int 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
public void 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
public void onClick(int whichButton) {
switch(whichButton){
case MMAlertSelect1: { break;
}
case MMAlertSelect2: { break;
}
case MMAlertSelect3: { break;
}
default:
break;
}
} });
}
});

代码下载

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

下载地址二:

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

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

  1. 【Android UI设计与开发】7.底部菜单栏(四)PopupWindow 实现显示仿腾讯新闻底部弹出菜单

    前一篇文章中有用到 PopupWindow 来实现弹窗的功能.简单介绍以下吧. 官方文档是这样解释的:这就是一个弹出窗口,可以用来显示一个任意视图.出现的弹出窗口是一个浮动容器的当前活动. 1.首先来 ...

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

    用微信小程序做了一个动画,效果如上图: 代码: js: Page({ data: { isPopping: false, animPlus: {}, animCollect: {}, animTran ...

  3. swift3.0 底部弹出菜单 UIAlertController的使用

    let optionMenuController = UIAlertController(title: nil, message: "选择图片", preferredStyle: ...

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

    项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay ...

  5. 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题

    如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...

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

    最后效果图: 各控件关系图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize ...

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

    弹出菜单是GUI程序中非常常见的一种控件.它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”.“属性”等菜单的弹出菜单.Swing中的弹出菜单是JPopupMenu ...

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

    Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自 ...

  9. PyQt(Python+Qt)学习随笔:设定toolButton弹出菜单的方法

    在Qt Designer中toolButton可以通过popupMode设定菜单弹出的模式,但并不能在Qt Designer中指定toolButton的弹出菜单,toolButton只能通过代码来指定 ...

随机推荐

  1. 关于ESXI能虚拟出多少个虚拟机和CPU的关系

    当你的虚拟机报如下错误的时候: esxi5.0版本最高配置: https://www.vmware.com/content/dam/digitalmarketing/vmware/zh-cn/pdf/ ...

  2. PHP交易详情有感

    交易详情 一般都是按月的, 包含,交易日期,交易金额,交易状态(可有可无) 总交易额等等. 如果数据多的话,最好能够分页. 最好能够查询具体的哪一个商户. 1.模拟sql实现查询功能 SELECT a ...

  3. Spring MVC启动时初始化的几个常用方法

    Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可) 一.ApplicationContextAware接口 +? 1 2 3 4 5 6 7 8 9 p ...

  4. maven学习1

     1.Maven的约定 src/main/java: 存放项目的java文件. src/main/resources: 存放项目的资源文件,如spring,hibernate的配置文件. src/te ...

  5. web deploy 部署网站

    一.服务端配置 1. 确保在服务器端(我目前是win server 2012 R2)安装管理服务 安装后服务器会重启, 2)安装webdeploy http://www.iis.net/downloa ...

  6. Node.js实用知识点

    本文介绍如何使用nodejs 简单的HttpServer 调试nodejs 基础路由 nodejs配置开发和生产环境 nodejs核心模块一览 express用法 文件I/O nodejs模块 nod ...

  7. kafka集群配置和java编写生产者消费者操作例子

    kafka 安装 修改配置文件 java操作kafka kafka kafka的操作相对来说简单很多 安装 下载kafka http://kafka.apache.org/downloads tar ...

  8. Rhel6.0部署Oracle10g报错相关问题记录

    1.libawt.so及libXt.so.6,lib*系列报错,到最后的界面ruiy哥我笑了!.相信你也会笑的!终于找到根源了!哇哈哈!希望后面不要报error in invoking target ...

  9. Command对象

  10. python--numpy学习(一)

    NumPy 部分功能如下: ndarray,一个具有矢量运算符和复杂广播能力的快速节省空间的多维数组 用于对数组数据进行快速运算的标准数学函数 用于读写磁盘数据的工具以及用于操作内存映射文件的工具 线 ...