原文地址: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

【转】微信中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. MySQL for Linux错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    参考链接:http://www.cnblogs.com/gumuzi/p/5711495.html

  2. jmeter中50%70%80%90%代表的含义

    参考 http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html 我的理解是: 在4.08秒响应时间内有50%的用户达到这个4.08的标准 ...

  3. 2017中国大学生程序设计竞赛 - 女生专场(Graph Theory)

    Graph Theory Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  4. SQLSERVER 2008 查询数据字段名类型

    SELECT * FROM Master..SysDatabases ORDER BY Name SELECT Name,* FROM Master..SysDatabases where Name= ...

  5. Maria数据库

    项目上要进行数据库选型,业务上来讲,数据是非常结构化的数据,使用传统关系数据库更适合:另外项目采用微服务框架,每个服务的数据库应该尽可能轻量级, 最后考虑Maria数据库. MariaDB简介: Ma ...

  6. Python多线程-生产者消费者模型

    用多线程和队列来实现生产者消费者模型 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threading imp ...

  7. pcs与crmsh命令比较

    一.概念 1.crmsh This project is not part of the GNU Project. Pacemaker command line interface for manag ...

  8. springboot成神之——springboot入门使用

    springboot创建webservice访问mysql(使用maven) 安装 起步 spring常用命令 spring常见注释 springboot入门级使用 配置你的pom.xml文件 配置文 ...

  9. 第一章 Spring整体架构和环境搭建(待续)

    ········

  10. DIKW模型与数据工程

    DIKW 体系 DIKW体系是关于数据.信息.知识及智慧的体系,可以追溯至托马斯·斯特尔那斯·艾略特所写的诗--<岩石>.在首段,他写道:“我们在哪里丢失了知识中的智慧?又在哪里丢失了信息 ...