android弹窗使用总结,高仿QQ空间操作弹窗
来源:互联网 发布:模糊算法的c语言实现 编辑:程序博客网 时间:2024/06/10 23:28
android弹窗一共有两种方式,一种是dialog及其子类,另一种是popupwindow;Dialog及其子类尤其AlertDialog是最常用的,也是最自由的一种。
**Popupwindow与Dialog的区别:**AlertDialog是非阻塞线程的,AlertDialog弹出的时候,后台可是还可以做其他事情的哦。
而PopupWindow是阻塞线程的, 这就意味着在我们退出这个弹出框之前,程序会一直等待。
PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件。具体如下
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移。其实Popupwindow是自己提供了偏移的设置,但使用AlertDialog获取window对其进行相关设置也能达到弹窗位置随意显示的效果,接下来的高仿QQ空间弹窗就是使用AlertDialog实现任意位置显示弹窗效果的。
——————————————–分割线————————————————–
接下来就要讲高仿QQ空间弹窗的实现
PS:有人喜欢继承Dialog自定义Dialog,但我还是喜欢子在用的到的地方自己写,除非这个dialog会被用多次.
现在讲一下高仿QQ空间弹窗的需求,QQ空间每天说说的右上角会有一个小三角,点击会弹出一个弹窗,同时弹窗会随着Listview中item的小三角的位置变化。不清楚的话用手Q体验一下就好了。
核心代码:
@SuppressLint("NewApi")public void showDialog(View v) { int[] coo = new int[2];// 获取小三角view位置,用来设置dialog的显示位置 v.getLocationInWindow(coo); /* 先实例化dialog并进行相关设置 */ final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) .create(); dialog.show(); dialog.setCanceledOnTouchOutside(true); LinearLayout ll = (LinearLayout) getLayoutInflater().inflate( R.layout.dialog_content, null); dialog.setContentView(ll); /*//计算dialog显示的view的高度 ll.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int ch = ll.getMeasuredHeight();*/ /* 获取window并进行相关设置 */ Window window = dialog.getWindow(); if (coo[1] > sh * 0.65) {//sh指屏幕高度,sw指屏幕宽度,但小三角的位置超过屏幕的65%时,弹窗就变为在小三角上面显示 window.setWindowAnimations(R.style.mydialog2); // 添加动画 coo[1] -= sh*0.2;//y轴减去sh*0.2是因为dialog的高度为sh*0.2 } else { window.setWindowAnimations(R.style.mydialog); // 添加动画 } window.setGravity(Gravity.TOP);/*一定要设置为TOP,因为lp中的设置的x,y都是基于这个位置的 ,如果为TOP,lp设置的y为0时,就在最上面显示,如果为CENTER,y为0时,dialog就在中间显示*/ /* window的宽高,为window的一部分 */ WindowManager.LayoutParams lp = window.getAttributes(); lp.width = (int) (sw * 0.8); lp.height = (int) (sh * 0.2); lp.y = coo[1]; window.setAttributes(lp);}
上面是核心代码,全部代码下载链接:http://download.csdn.net/detail/u013592964/9606680
效果图:
PS:没有美工,界面丑了点
- android弹窗使用总结,高仿QQ空间操作弹窗
- Android仿QQ空间
- Android仿QQ空间
- Android仿QQ空间
- 高仿QQ右下角新闻弹窗之MFC版
- 安卓开发高仿QQ空间
- Android高仿QQ小红点
- Android使用SwipeMenuListView 高仿QQ、微信侧滑删除--详解
- android 使用ViewDragHelper高仿QQ主界面效果
- Android高仿今日头条/QQ空间手势下拉关闭图片效果
- Android仿QQ空间底部菜单
- Android仿QQ空间底栏
- Android仿QQ空间底部菜单
- android 仿QQ空间listview反弹效果
- Android 简单仿qq空间时间显示
- Android仿QQ空间二级评论列表
- Android之高仿手机QQ聊天
- Android之高仿QQ聊天
- 数据结构实验之图论四:迷宫探索
- NOIP2011 选择客栈 解题报告(DP)
- mysql5.6添加用户出错 :Field 'ssl_cipher' doesn't have a default value
- 前端速学成财:第十二课-实战演练:用gulp像CMS那样生成新闻页面
- Spring下jdbcTemplate增删改查总结
- android弹窗使用总结,高仿QQ空间操作弹窗
- Android基础:shape的基本用法
- 禁止浏览器自动填充到表单
- 接口和抽象类的区别
- POJ - 2441 Arrange the Bulls (状态压缩DP)
- hdu 5857 Median ★
- UVALive 4487 - Exclusive-OR -并查集 虚根
- sae云平台发布微信应用——https获取微信accesstoken
- S5PV210启动过程分析