【转】微信中MMAlert(半透明底部弹出菜单)的使用介绍
原文地址: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(半透明底部弹出菜单)的使用介绍的更多相关文章
- 【Android UI设计与开发】7.底部菜单栏(四)PopupWindow 实现显示仿腾讯新闻底部弹出菜单
前一篇文章中有用到 PopupWindow 来实现弹窗的功能.简单介绍以下吧. 官方文档是这样解释的:这就是一个弹出窗口,可以用来显示一个任意视图.出现的弹出窗口是一个浮动容器的当前活动. 1.首先来 ...
- 微信小程序动画之弹出菜单
用微信小程序做了一个动画,效果如上图: 代码: js: Page({ data: { isPopping: false, animPlus: {}, animCollect: {}, animTran ...
- swift3.0 底部弹出菜单 UIAlertController的使用
let optionMenuController = UIAlertController(title: nil, message: "选择图片", preferredStyle: ...
- Android 底部弹出Dialog(横向满屏)
项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay ...
- 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题
如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...
- iOS_21团购_顶部菜单和弹出菜单联动
最后效果图: 各控件关系图1: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize ...
- Swing-JPopupMenu弹出菜单用法-入门
弹出菜单是GUI程序中非常常见的一种控件.它通常由鼠标右击事件触发,比如在windows系统桌面上右击时,会弹出一个包含“刷新”.“属性”等菜单的弹出菜单.Swing中的弹出菜单是JPopupMenu ...
- Delphi XE7实现的任意位置弹出菜单
Delphi XE7中目前还没有弹出菜单组件,这个弹出菜单应用很普遍,在JAVA开发的安卓程序中很简单就可以用上了,应该说是一个标准控件.看了一些例子,但是都不能满足我想在任意位置弹出菜单需求,于是自 ...
- PyQt(Python+Qt)学习随笔:设定toolButton弹出菜单的方法
在Qt Designer中toolButton可以通过popupMode设定菜单弹出的模式,但并不能在Qt Designer中指定toolButton的弹出菜单,toolButton只能通过代码来指定 ...
随机推荐
- MySQL for Linux错误: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
参考链接:http://www.cnblogs.com/gumuzi/p/5711495.html
- jmeter中50%70%80%90%代表的含义
参考 http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html 我的理解是: 在4.08秒响应时间内有50%的用户达到这个4.08的标准 ...
- 2017中国大学生程序设计竞赛 - 女生专场(Graph Theory)
Graph Theory Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- SQLSERVER 2008 查询数据字段名类型
SELECT * FROM Master..SysDatabases ORDER BY Name SELECT Name,* FROM Master..SysDatabases where Name= ...
- Maria数据库
项目上要进行数据库选型,业务上来讲,数据是非常结构化的数据,使用传统关系数据库更适合:另外项目采用微服务框架,每个服务的数据库应该尽可能轻量级, 最后考虑Maria数据库. MariaDB简介: Ma ...
- Python多线程-生产者消费者模型
用多线程和队列来实现生产者消费者模型 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threading imp ...
- pcs与crmsh命令比较
一.概念 1.crmsh This project is not part of the GNU Project. Pacemaker command line interface for manag ...
- springboot成神之——springboot入门使用
springboot创建webservice访问mysql(使用maven) 安装 起步 spring常用命令 spring常见注释 springboot入门级使用 配置你的pom.xml文件 配置文 ...
- 第一章 Spring整体架构和环境搭建(待续)
········
- DIKW模型与数据工程
DIKW 体系 DIKW体系是关于数据.信息.知识及智慧的体系,可以追溯至托马斯·斯特尔那斯·艾略特所写的诗--<岩石>.在首段,他写道:“我们在哪里丢失了知识中的智慧?又在哪里丢失了信息 ...